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

如何转义文本中的HTML标签?脚本注入引发语法错误求解

安全转义HTML标签,避免document.write插入变量的语法错误

问题根源

你遇到的错误是因为直接将未转义的字符串插入到document.write()中,当字符串包含</script>或<script>这类标签时,会破坏当前脚本的语法结构:

  • 当name为</script>test时,</script>会直接闭合当前的<script>标签,剩余的test变成脚本外的无效代码,触发语法错误。
  • 当name为<script>asda<script>时,插入的<script>会被JS解析器当作新的脚本标签,导致语法混乱。

解决方案

方案1:改用DOM操作(推荐)

放弃document.write,直接通过DOM元素的textContent属性设置内容——textContent会自动将所有内容当作纯文本处理,既不会解析HTML标签,也不会破坏脚本结构。

示例代码:

<td><a href="#" id="name-target"></a></td>
<script>
  const name = '</script>test'; // 含特殊标签的变量值
  document.getElementById('name-target').textContent = name;
</script>

这样页面会直接显示</script>test纯文本,不会触发任何语法错误。

方案2:手动转义特殊字符(如果必须用document.write)

编写一个HTML转义函数,将特殊字符替换为对应的HTML实体,避免破坏脚本结构和HTML解析:

function escapeHtml(str) {
  return str.replace(/&/g, '&amp;')
            .replace(/</g, '&lt;')
            .replace(/>/g, '&gt;')
            .replace(/"/g, '&quot;')
            .replace(/'/g, '&#039;');
}

然后在document.write中使用该函数:

<td><a href="#"><script>
  const name = '</script>test';
  document.write(escapeHtml(name));
</script></a></td>

转义后,</script>会被转换为&lt;/script&gt;,浏览器渲染时会显示为</script>纯文本,同时不会破坏脚本结构。

注意事项

优先选择DOM操作的方式,document.write在现代前端开发中属于不推荐的写法——它在页面加载完成后调用会清空整个页面,且行为不可控,容易引发各种意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:04:06