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