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;)或写入编码字符(在您的帖子中就是这种情况).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


html5中section的用法
span标签和p标签的区别
jsp文件和html文件的区别是什么
span标签和div的区别
html颜色代码表大全
span标签的作用是什么
dhtml的主要组成部分包括什么
html编辑器哪个软件好用
span标签属于什么样式标签
html文件乱码怎么办
html怎么读取json文件
html文件打开乱码怎么恢复原状
html怎么链接外部css
html文件怎么保存到本地
html怎么链接css文件
html和css怎么连接
html和css怎么关联
html文件怎么保存到一个站点
html文件怎么写
html出现乱码怎么解决