【问题标题】:How to remove `//<![CDATA[` and end `//]]>`?如何删除`//<![CDATA[`并结束`//]]>`?
【发布时间】:2012-01-07 04:31:47
【问题描述】:

如何删除(//&lt;![CDATA[ , //]]&gt;) 块; script 元素内的标签。

<script type="text/javascript">
    //<![CDATA[
    var l=new Array();
    ..........................
    ..........................
    //]]>
</script>

看起来可以使用preg_replace() 完成,但还没有找到适合我的解决方案。

我会使用什么正则表达式?

【问题讨论】:

标签: php regex preg-replace cdata


【解决方案1】:

静态字符串不需要正则表达式。

将文本的那些部分替换为空:

$string = str_replace("//<![CDATA[","",$string);
$string = str_replace("//]]>","",$string);

【讨论】:

  • 如果它包含该文本作为script 正文的一部分,可能是一个字符串?
  • 我喜欢这个解决方案比 Regex 选项好得多,阅读起来更清晰。
【解决方案2】:

下面的正则表达式可以做到...

$removed = preg_replace('/^\s*\/\/<!\[CDATA\[([\s\S]*)\/\/\]\]>\s*\z/', 
                        '$1', 
                        $scriptText);

CodePad.

【讨论】:

  • 嗨亚历克斯..不,不幸的是没有。知道为什么 - 但让艾伦工作。也许您可以看到两种解决方案之间的区别。感谢您的意见。
【解决方案3】:

如果你必须...

$s = preg_replace('~//<!\[CDATA\[\s*|\s*//\]\]>~', '', $s);

这将删除包含每个标签的整行,而不会弄乱封闭代码的缩进。

【讨论】:

    【解决方案4】:

    你也可以试试,

    $s=str_replace(array("//<![CDATA[","//]]>"),"",$s);
    

    【讨论】:

      【解决方案5】:

      使用str_replace() 而不是preg_replace() 会容易得多

      $var = str_replace('<![CDATA[', '', $var);
      $var = str_replace(']]','',$var);
      echo $var;
      

      【讨论】:

        【解决方案6】:

        我用这样来删除&lt;![CDATA[]],但现在单行对我有用,不知道是否适用于多行字符串。

        preg_match_all('/CDATA\[(.*?)\]/', $your_string_before_this, $datas); 
        $string_result_after_this = $datas[1][0];
        

        【讨论】:

          【解决方案7】:
          $nodeText = '<![CDATA[some text]]>';
          $text = removeCdataFormat($nodeText);    
          
          public function removeCdataFormat($nodeText)
          {
              $regex_replace = array('','');
              $regex_patterns = array(
                  '/<!\[CDATA\[/',
                  '/\]\]>/'
             );
             return trim(preg_replace($regex_patterns, $regex_replace, $nodeText));
          }
          

          【讨论】:

            【解决方案8】:

            如果&lt;![CDATA[ 包含一些 html 特殊字符,例如&amp;"'&lt;&gt; 并且您将使用字符串的其余部分,因为它仍然是 XML,您应该转义这些字符。 否则你将使你的 XML 无效。

            function removeCDataFromString(string $string)
            {
                return preg_replace_callback(
                    '~<!\[CDATA\[(.*)\]\]>~',
                    function (array $matches) {
                        return htmlspecialchars($matches[1], ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
                    },
                    $string
                );
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-12-16
              • 1970-01-01
              • 1970-01-01
              • 2015-10-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-10-05
              相关资源
              最近更新 更多