我正在使用Jsoup来清理表单中的用户输入.有问题的表格包含一个<textarea>期望纯文本的表格.提交表单时,我清理输入Jsoup.clean(textareaContents); 但是,由于html忽略了额外的空格,Jsoup.clean()因此将从输入中删除有价值的空白字符.
例如,如果有人在以下位置输入了一些文本行textarea:
hello
test
Run Code Online (Sandbox Code Playgroud)
之后Jsoup.clean(),您将拥有:
hello test
Run Code Online (Sandbox Code Playgroud)
你怎么能Jsoup.clean()保留空白?我知道它是为解析html而设计的,这不是html,所以有更好的选择吗?
对于后代,如果仍需要使用空格访问原始文本,则可以使用TextNode.getWholeText()方法.
示例代码:
/**
* @param cell element that contains whitespace formatting
* @return
*/
public static String getText(Element cell) {
String text = null;
List<Node> childNodes = cell.childNodes();
if (childNodes.size() > 0) {
Node childNode = childNodes.get(0);
if (childNode instanceof TextNode) {
text = ((TextNode)childNode).getWholeText();
}
}
if (text == null) {
text = cell.text();
}
return text;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我们假设传入的元素直接在元素体内包含文本内容(我们采用第一个节点).如果不是这样,它将回退到常规的Element.text()方法.
如果您的 textarea 只需要纯文本,那么我认为您最好只使用 HTML 转义纯文本。即将用户的输入<和>标签分别转换为<和>。无论是输入我们的输出(输入可能更安全,所以你只需要考虑一次)。
该jsoup HTML清洁剂是,如你所说,旨在解析不可信输入HTML和outuput信任的HTML,其中格式化与元素来完成。
| 归档时间: |
|
| 查看次数: |
5766 次 |
| 最近记录: |