【问题标题】:Jsoup unescapes special charactersJsoup 取消转义特殊字符
【发布时间】:2015-12-19 08:46:25
【问题描述】:

我正在使用 Jsoup 从 HTML 页面中删除所有图像。 我通过 HTTP 响应接收页面 - 它还包含内容字符集。

问题是 Jsoup 未转义一些特殊字符。

例如,对于输入:

<html><head></head><body><p>isn&rsquo;t</p></body></html>

运行后

String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>";
Document doc = Jsoup.parse(check);
System.out.println(doc.outerHtml());

我明白了:

<html><head></head><body><p>isn’t</p></body></html><p></p>

我想避免以任何其他方式更改 html,除了删除图像。

通过使用命令:

doc.outputSettings().prettyPrint(false).charset("ASCII").escapeMode(EscapeMode.extended);

我确实得到了正确的输出,但我确信在某些情况下该字符集不会很好。我只想使用 HTTP 标头中指定的字符集,恐怕这会以我无法预测的方式更改我的文档。 有没有其他更干净的方法来删除图像而不会无意中更改任何其他内容?

谢谢!

【问题讨论】:

    标签: html character-encoding escaping jsoup


    【解决方案1】:

    这是一种不涉及除 HTTP 标头中指定的字符集之外的任何字符集的解决方法。

    String check = "<html><head></head><body><p>isn&rsquo;t</p></body></html>".replaceAll("&([^;]+?);", "**$1;");
    
    Document doc = Jsoup.parse(check);
    
    doc.outputSettings().prettyPrint(false).escapeMode(EscapeMode.extended);
    
    System.out.println(doc.outerHtml().replaceAll("\\*\\*([^;]+?);", "&$1;"));
    

    输出

    <html><head></head><body><p>isn&rsquo;t</p></body></html>
    

    讨论

    我希望 Jsoup 的 API 中有解决方案 - @dlv

    使用 Jsoup'API 将需要您编写自定义 NodeVisitor。这将导致(重新)发明 Jsoup 中的一些现有代码。自定义 Nodevisitor 将生成返回 HTML 转义码而不是 unicode 字符。

    另一种选择是编写自定义字符编码器。默认的 UTF-8 字符编码器可以编码&amp;rsquo;。这就是为什么 Jsoup 没有在最终的 HTML 代码中保留原始转义序列的原因。

    以上两个选项中的任何一个都代表了很大的编码工作。最终,可以在 Jsoup 中添加增强功能,让我们选择如何在最终 HTML 代码中生成字符:十六进制转义 (&amp;#AB;)、十进制转义 (&amp;#151;)、原始转义序列 (&amp;rsquo;) 或写下编码的字符(你的帖子就是这种情况)。

    【讨论】:

    • 谢谢,虽然我希望 Jsoup 的 API 中有解决方案,但我现在将使用它。
    • @Ravisha 您可以在此页面的“最新消息”部分找到此信息:jsoup.org/download
    • 我遇到了一个问题,客户的内容中有多个星号,并且此逻辑在内容中添加了不需要的 & 符号。我没有使用星号 (*),而是使用了不可见的 ASCII 31(单位分隔符)。
    • 我的文本包含数字实体,如 à,此方法将它们替换为 html 实体,如 à。有没有办法避免这种情况?
    猜你喜欢
    • 1970-01-01
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多