如何删除(//<![CDATA[ , //]]>
)块; script
元素内的标签。
<script type="text/javascript">
//<![CDATA[
var l=new Array();
..........................
..........................
//]]>
</script>
看起来可以使用preg_replace()
完成,但还没有找到适合我的解决方案。
我会使用什么正则表达式?
答案 0 :(得分:17)
静态字符串不需要正则表达式。
用任何东西替换文本的那些部分:
$string = str_replace("//<![CDATA[","",$string);
$string = str_replace("//]]>","",$string);
答案 1 :(得分:12)
以下正则表达式会做到这一点......
$removed = preg_replace('/^\s*\/\/<!\[CDATA\[([\s\S]*)\/\/\]\]>\s*\z/',
'$1',
$scriptText);
答案 2 :(得分:6)
如果你必须......
$s = preg_replace('~//<!\[CDATA\[\s*|\s*//\]\]>~', '', $s);
这将删除包含每个标记的整行,而不会弄乱所附代码的缩进。
答案 3 :(得分:1)
你也可以尝试,
$s=str_replace(array("//<![CDATA[","//]]>"),"",$s);
答案 4 :(得分:0)
使用str_replace()
代替preg_replace()
更容易
$var = str_replace('<![CDATA[', '', $var);
$var = str_replace(']]','',$var);
echo $var;
答案 5 :(得分:0)
我使用这样删除<![CDATA[]]
,但单行现在可以为我工作,不知道是否有多行字符串。
preg_match_all('/CDATA\[(.*?)\]/', $your_string_before_this, $datas);
$string_result_after_this = $datas[1][0];
答案 6 :(得分:0)
$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));
}
答案 7 :(得分:0)
如果<![CDATA[
包含一些html特殊字符,例如&
,"
,'
,<
,>
,您将使用字符串的其余部分,因为它仍然是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
);
}