【问题标题】:How to keep link title attribute with jsoup?如何使用 jsoup 保留链接标题属性?
【发布时间】:2017-04-07 22:23:48
【问题描述】:

使用Jsoup.clean(),jsoup 将HTML 链接的title 属性转换为:

<a href="" title="test &lt;br /&gt;">TEST</a>

进入:

<a href="" title="test <br />">TEST</a>

这是演示应用程序:

Whitelist whitelist = new Whitelist();
whitelist.addTags("a");
whitelist.addAttributes("a", "href", "title");

String input = "<a href=\"\" title=\"test &lt;br /&gt;\">TEST</a>";
System.out.println("input: " + input);
String output = Jsoup.clean(input, whitelist);
System.out.println("output: " + output);

哪个打印:

input: &lt;a href="" title="test &amp;lt;br /&amp;gt;"&gt;TEST&lt;/a&gt;
output: &lt;a href="" title="test &lt;br /&gt;"&gt;TEST&lt;/a&gt;

我尝试用EscapeMode添加OutputSettings

OutputSettings outputSettings = new OutputSettings();
outputSettings.escapeMode(EscapeMode.xhtml);

EscapeMode.baseEscapeMode.extend 无效。 EscapeMode.xhtml 打印以下内容:

input: &lt;a href="" title="test &amp;lt;br /&amp;gt;"&gt;TEST&lt;/a&gt;
output: &lt;a href="" title="test &amp;lt;br /&gt;"&gt;TEST&lt;/a&gt;

知道 jsoup 如何不操纵title 标签吗?

【问题讨论】:

    标签: java jsoup


    【解决方案1】:

    这是一个已知问题/行为:https://github.com/jhy/jsoup/issues/684jsoup 团队标记为“无法修复”)。

    这里没有错误。

    在序列化时(即在您的示例中,当您打印出 XML/HTML 时),我们会根据需要转义尽可能少的字符。这就是为什么 > 没有转义到 >;因为它在一个带引号的属性中,所以它关闭一个标签是没有歧义的,所以它不会被转义。

    【讨论】:

    • 你知道吗,有没有一种解决方法或黑客可以抑制这种行为?
    • @flavio.donze - 不,很遗憾,我想不出任何解决方法,除了修补 JSoup 本身或对输出进行后处理。
    • 最终修补... API 会很棒,也许可以设置自己的自定义 EscapeMode。
    猜你喜欢
    • 2012-02-06
    • 2014-02-05
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多