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

PHP中strip_tags处理特定字符串时失效的问题求助

PHP中strip_tags处理特定字符串时失效的问题求助

嘿,这个问题我之前也踩过坑!咱们先捋捋情况:平时用PHP的strip_tags()清理HTML标签都挺顺手的,不管是<script>、<style>还是<div>这些标签都能正常处理,但这次碰到个特殊字符串,这函数居然直接“罢工”了,属实头疼!

先看看你用到的这段代码:

$string = '      <div>BEGINNING</div>      <script>     for (let i=0;i<resultado4448.length;i++) {      }     </script>      <div>END</div>  ';  
echo strip_tags($string);

为啥会出问题呢?其实是strip_tags()的工作机制导致的——它只会机械地把<字符当作HTML标签的起始,完全没法区分这个<是JavaScript里的比较运算符,还是真的HTML标签开头。碰到你这段代码里的i<resultado4448.length,它直接把这个<当成了新标签的开始,然后一直找对应的>来闭合,结果把<script>标签里剩下的内容、甚至后面的</script>和<div>END</div>都当成了要剥离的标签内容,输出自然就不对了。

给你两个实用的解决办法:

  • 用DOMDocument解析处理(这是最稳妥的方案,能正确识别HTML结构和脚本内容):
    $string = '      <div>BEGINNING</div>      <script>     for (let i=0;i<resultado4448.length;i++) {      }     </script>      <div>END</div>  ';
    // 初始化DOM文档
    $dom = new DOMDocument();
    // 忽略HTML解析时的警告(避免格式不规范引发的报错)
    libxml_use_internal_errors(true);
    $dom->loadHTML($string);
    libxml_clear_errors();
    
    // 用XPath定位所有script标签并删除
    $xpath = new DOMXPath($dom);
    foreach ($xpath->query('//script') as $scriptTag) {
        $scriptTag->parentNode->removeChild($scriptTag);
    }
    
    // 提取并输出纯文本内容
    echo trim($dom->textContent);
    
  • 要是你只需要处理这种简单场景,也可以用临时替换的hack写法(只适合特定情况,通用性不如DOM方案):
    $string = '      <div>BEGINNING</div>      <script>     for (let i=0;i<resultado4448.length;i++) {      }     </script>      <div>END</div>  ';
    // 临时替换script标签内的<为占位符
    $string = preg_replace_callback('/<script[^>]*>(.*?)<\/script>/is', function($matches) {
        return str_replace('<', 'TEMP_LT', $matches[0]);
    }, $string);
    // 执行strip_tags清理
    $result = strip_tags($string);
    // 还原占位符
    $result = str_replace('TEMP_LT', '<', $result);
    echo trim($result);
    

备注:内容来源于stack exchange,提问作者Sitepor500.com.br

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:03:05