Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何删除`/<;![CDATA[`和结束`/]]>;`?_Php_Regex_Preg Replace_Cdata - Fatal编程技术网

Php 如何删除`/<;![CDATA[`和结束`/]]>;`?

Php 如何删除`/<;![CDATA[`和结束`/]]>;`?,php,regex,preg-replace,cdata,Php,Regex,Preg Replace,Cdata,如何删除(//)块;脚本元素中的标记 <script type="text/javascript"> //<![CDATA[ var l=new Array(); .......................... .......................... //]]> </script> // 看起来可以用preg\u replace()完成,但还没有找到适合我的解决方案 我将使用什么正则表达式?下面

如何删除
(//
)块;
脚本
元素中的标记

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

//
看起来可以用
preg\u replace()
完成,但还没有找到适合我的解决方案


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

下面的正则表达式将使用它

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

如果您必须

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

这将删除包含每个标记的整行,而不会弄乱所附代码的缩进。

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

将这些文本部分替换为零:

$string = str_replace("//<![CDATA[","",$string);
$string = str_replace("//]]>","",$string);
$string=str\u replace(“//”、“”、$string);
使用
str\u replace()
而不是
preg\u replace()
更简单

$var = str_replace('<![CDATA[', '', $var);
$var = str_replace(']]','',$var);
echo $var;
$var=str_replace(“您也可以尝试

$s=str_replace(array("//<![CDATA[","//]]>"),"",$s);
$s=str\u替换(数组(“/”),$s);

我用这样的方式来删除
,但现在在单行上对我有效,不知道是否适用于多行字符串

preg_match_all('/CDATA\[(.*?)\]/', $your_string_before_this, $datas); 
$string_result_after_this = $datas[1][0];
$nodeText='';
$text=removeCdataFormat($nodeText);
公共函数removeCataFormat($nodeText)
{
$regex_replace=数组(“”,”);
$regex_patterns=数组(
'//'
);
返回修剪(preg_replace($regex_patterns,$regex_replace,$nodeText));
}
如果
包含一些html特殊字符,例如
&
”,
,您将处理字符串的其余部分,因为它仍然是XML,您应该转义这些字符。 否则,您将使XML无效

函数removeCDataFromString(string$string)
{
返回preg_replace_回调(
'~~',
函数(数组$matches){
返回htmlspecialchars($matches[1],ENT|u QUOTES | ENT|u SUBSTITUTE,'UTF-8');
},
$string
);
}

只是好奇你为什么要删除这两行?bomanden:@JonathanM是对的,你可能不需要删除这些元素。请看并仔细考虑。好的-只是Javascript没有启动..所以代码没有执行..这是在我使用Alan的解决方案时。但是感谢你提供的信息。嗨,Alex..不,不幸的是没有。你知道为什么-但我得到了答案a ALAN正在工作。也许你可以看到这两种解决方案之间的差异。感谢你的输入。如果它将该文本作为
脚本
正文的一部分,或者作为字符串,该怎么办?我喜欢这个解决方案远胜于正则表达式选项,更易于阅读。
$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));
}