【问题标题】:How to prevent jsoup converting special characters? [duplicate]如何防止jsoup转换特殊字符? [复制]
【发布时间】:2017-05-02 08:33:22
【问题描述】:

请看下面的简化示例:

    public static void main(String[] args) {
       String html = "<html>\n" +
                    " <head></head>\n" +
                    " <body>\n" +
                    "  <div> \n" +
                    "   <p> 2 <= X </p> \n" +
                    "  </div>\n" +
                    " </body>\n" +
                    "</html>";
        Document doc = Jsoup.parse(html);                    
        System.out.println(doc.select("p").outerHtml());
    }

这会打印出&lt;p&gt; 2 &amp;lt;= X &lt;/p&gt;,但我希望所选的 html 部分会按原样打印出来:&lt;p&gt; 2 &lt;= X &lt;/p&gt;。我如何告诉 jsoup 不要转换 '

【问题讨论】:

  • 您的输入不是有效的 HTML。 Jsoup 为您转义它是正确的。
  • 我无法控制输入。有没有办法告诉 jsoup 忽略 html 的有效性并按原样解析文档以获得所需的输出?

标签: java jsoup


【解决方案1】:

可以使用jsoup。

使用 jSoup 1.8.3 可以使用方法Parser.unescapeEntities 保留原始 html。

import org.jsoup.parser.Parser;
...
String html = Parser.unescapeEntities(original_html, false));

在某些以前的版本中,此方法不存在。

阅读更多来自this link.

【讨论】:

  • 谢谢。那成功了。但是第二个布尔参数是什么?
  • 设置为真假好像没什么区别?
  • @RedSea - 请查找布尔参数jsoup.org/apidocs/org/jsoup/parser/…的详细信息
【解决方案2】:

您可以为此使用 Apache Commons StringEscapeUtils.unescapeHtml4():

System.out.println(StringEscapeUtils.unescapeHtml4(doc.select("p").outerHtml()));

http://commons.apache.org/proper/commons-lang/javadocs/api-3.1/org/apache/commons/lang3/StringEscapeUtils.html#unescapeHtml4(java.lang.String)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 2019-06-21
    • 2017-12-10
    • 2015-06-25
    • 2015-02-12
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多