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

AntiSamy移除<script>标签后内容丢失问题求助

AntiSamy扫描后返回空字符串而非预期"testing"的问题解决

我来帮你拆解下这个问题,你遇到的情况大概率是未闭合的<script>标签加上AntiSamy的解析逻辑导致的,下面一步步给你分析和解决:

问题根源

你提供的代码里,dirtyContent的第一个<script>标签没有正确闭合:

String dirtyContent = "<script>test<script>testing";

AntiSamy的HTML解析器会把未闭合的标签判定为「后续所有内容都属于该标签的内部」,所以它会把从第一个<script>开始到结尾的全部内容都识别为脚本内容,最终一次性移除,导致返回空字符串。

另外也需要确认你的策略文件配置是否合理,如果策略对<script>标签的处理过于严格(比如连带父容器一起移除),也可能出现类似情况,但最常见的诱因还是未闭合标签的问题。

解决方案

1. 修正未闭合的标签

先把代码里的<script>标签正确闭合,这是最直接的修复方式:

String dirtyContent = "<script>test</script>testing"; // 将第二个<script>替换为</script>
CleanResults cr = as.scan(dirtyContent, policy);
System.out.println(cr.getCleanHTML()); // 现在应该输出预期的"testing"

2. 检查并调整策略文件配置

确保你的AntiSamy策略文件(比如默认的antisamy-slashdot.xml或自定义策略)里对<script>标签的配置是action="remove",这个配置会移除标签及其内部内容,但保留标签外的正常文本:

<tag name="script" action="remove"/>

同时要确保策略允许保留普通文本内容,可在策略的directives部分添加相关配置:

<directives>
  <directive name="omitXmlDeclaration" value="true"/>
  <directive name="maxInputSize" value="100000"/>
  <!-- 明确允许保留文本节点 -->
  <directive name="allowTextNodes" value="true"/>
</directives>

3. 额外优化:预处理不规范HTML

如果你的输入内容经常存在不规范的HTML(比如大量未闭合标签),可以先使用HTML修复工具(如Jsoup)做预处理,把不规范标签修复后再传给AntiSamy:

// 先用Jsoup修复未闭合标签
String preprocessedHtml = Jsoup.clean(dirtyContent, Whitelist.none());
// 再传给AntiSamy扫描
CleanResults cr = as.scan(preprocessedHtml, policy);

按照上面的步骤调整后,应该就能得到你预期的"testing"输出了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 08:52:53