防止Jsoup丢弃额外的空格

Kei*_*ith 5 java jsoup

我正在使用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,所以有更好的选择吗?

Nee*_*aks 9

对于后代,如果仍需要使用空格访问原始文本,则可以使用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()方法.


Jon*_*ley 5

如果您的 textarea 只需要纯文本,那么我认为您最好只使用 HTML 转义纯文本。即将用户的输入<>标签分别转换为&lt;&gt;。无论是输入我们的输出(输入可能更安全,所以你只需要考虑一次)。

jsoup HTML清洁剂是,如你所说,旨在解析不可信输入HTML和outuput信任的HTML,其中格式化与元素来完成。