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

为何PHP或jQuery会移除内联JS脚本中拼接的</a>标签并自行闭合标签?

问题分析:内联jQuery脚本在生产环境被异常修改

问题场景

编写的PHP代码用于输出标题及内联jQuery脚本,预期在placeholder div后插入包含链接的test-id div,本地环境运行正常,但部署到生产服务器后,脚本代码被异常修改:

原始代码

<?php
echo '<h2>Test</h2>';
?>

<div>
<form>
<input type="hidden" name="test">
<div id="placeholder"></div>
<script>
jQuery( document ).ready( function( $ ) {
    var testVar = 'Some info from a variable.';
    $( '<div id="test-id" class="test-class">' + testVar + ' <a href="/test?test=1">Test?</a></div>' ).insertAfter( $( '#placeholder' ) );
});
</script>
</form>
</div>

<?php
echo '<h2>End of test</h2>';
?>

生产环境异常代码

$( '<div id="test-id" class="test-class">' + testVar + ' <a href="/test?test=1">Test?</script>
</form>
</div>' ).insertAfter( $( '#placeholder' ) );

可见</a>标签被移除,<script>和<form>被提前自行闭合。

原因

生产环境中存在HTML内容过滤/净化工具(可能是服务器端插件、CDN内容优化机制、CMS的输出过滤功能),这类工具会自动检测并"修复"它认为不规范的HTML结构,但无法区分脚本字符串中的标签和真实页面结构标签:

  • 工具误将脚本字符串里的</a>识别为页面中未闭合的<a>标签的闭合标记,触发了自动闭合逻辑
  • 进而错误地提前闭合了<script>和<form>标签,同时移除了它判定为"多余"的标签内容

解决方案

  • 改用jQuery DOM创建语法:避免直接拼接HTML字符串,通过jQuery的对象创建方法构建元素,彻底规避标签识别问题:
    jQuery( document ).ready( function( $ ) {
        var testVar = 'Some info from a variable.';
        // 分步创建DOM元素
        var $newDiv = $('<div>', {
            id: 'test-id',
            class: 'test-class'
        }).text(testVar);
        var $link = $('<a>', {
            href: '/test?test=1',
            text: 'Test?'
        });
        $newDiv.append($link).insertAfter('#placeholder');
    });
    
  • 转义脚本内的HTML字符:将字符串中的<转义为&lt;,>转义为&gt;,插入到页面后jQuery会自动解析:
    $( '&lt;div id="test-id" class="test-class"&gt;' + testVar + ' &lt;a href="/test?test=1"&gt;Test?&lt;/a&gt;&lt;/div&gt;' ).insertAfter( $( '#placeholder' ) );
    
  • 关闭针对性过滤:如果明确是服务器/CDN的过滤工具导致,找到对应配置,将当前页面或内联脚本块排除在过滤规则外。
  • 改用外部JS文件:将内联脚本迁移到外部JS文件中引用,避免内容过滤工具误处理内联脚本中的字符串内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:00:23