You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Jsoup避免将单引号替换为双引号?

解决Jsoup清理HTML时保留原引号格式的问题

问题核心在于Jsoup默认会把属性的单引号统一转为双引号,导致你的isHTMLStringPolluted方法误判合法的单引号属性HTML为“污染”内容。只需调整Jsoup的输出配置,让它保留原始的引号格式就能解决。

修改后的核心代码

调整sanitizeHTML方法中的OutputSettings,添加quoteMode(QuoteMode.PRESERVE)配置:

import org.jsoup.nodes.Document;
import org.jsoup.safety.Safelist;
import org.jsoup.nodes.Document.QuoteMode;

public static String sanitizeHTML(String html) {
    return Jsoup.clean(html,
            "",
            Safelist.relaxed()
                    .addAttributes(":all", "style")
                    .addAttributes(":all", "class"),
            new Document.OutputSettings()
                    .prettyPrint(false)
                    .quoteMode(QuoteMode.PRESERVE)); // 关键配置:保留原引号格式
}

关键说明

  1. QuoteMode.PRESERVE的作用:该配置会让Jsoup在输出清理后的HTML时,完全保留原始属性的引号类型(单引号或双引号),不会强制统一为双引号。这样合法的单引号属性HTML在清理后与原内容一致,isHTMLStringPolluted就会返回false,验证通过。
  2. 版本要求:确保使用的Jsoup版本在1.14.0及以上,因为QuoteMode.PRESERVE是在这个版本新增的,旧版本需要先升级依赖。
  3. 兼容混合引号场景:如果用户输入中存在同一标签混合单双引号的情况,Jsoup也会如实保留,完全符合你“要么完全通过要么被拒绝”的验证逻辑。

内容的提问来源于stack exchange,提问作者Matthias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:47:12