html – Jsoup unescapes特殊字符

前端之家收集整理的这篇文章主要介绍了html – Jsoup unescapes特殊字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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);

我确实得到了正确的输出,但我确信有些情况下,charset不会很好.我只想使用HTTP标头中指定的字符集,我担心这会以我无法预测的方式更改我的文档.
有没有其他更清洁的方法删除图像而不会无意中更改任何其他内容

谢谢!

解决方法

除了在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;"));

OUTPUT

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

讨论

I wish there was a solution in Jsoup’s API – @dlv

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

另一种选择涉及编写自定义字符编码器.默认的UTF-8字符编码器可以编码& rsquo;.这就是Jsoup在最终HTML代码中不保留原始转义序列的原因.

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

原文链接:https://www.f2er.com/html/232013.html

猜你在找的HTML相关文章