How to remove `//<![CDATA[` and end `//]]>`?

為{幸葍}努か 提交于 2019-12-21 03:44:07

问题


How can I remove the (//<![CDATA[ , //]]>) blocks; tags inside a script element.

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

Looks like it can be done with preg_replace() but havent found a solution that works for me.

What regex would I use?


回答1:


The following regex will do it...

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

CodePad.




回答2:


You don't need regex for a static string.

Replace those parts of the texts with nothing:

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



回答3:


If you must...

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

This will remove the whole line containing each tag without messing up the indentation of the enclosed code.




回答4:


You can also try,

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



回答5:


use str_replace() instead of preg_replace() it's lot easier

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



回答6:


I use like this to remove <![CDATA[]] but on single line now work for me, dont know if for multiple line string.

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));
}


来源:https://stackoverflow.com/questions/8283588/how-to-remove-cdata-and-end

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!