在PHP中,我有一个包含HTML和javascript的模板:
<script>
if (a < b) {
alert(a);
}
</script>
<div>
hello
</div>
使用loadXML
方法将其输入到DOMDocument中,但由于脚本中包含<
字符,因此会产生错误。我知道我可能会使用loadHTML
方法,但是现在我只需要一个快速修复来取代&lt; script
标记内的字符,然后再用<
所以问题是,替换<
字符的最佳方法是什么,但只在script
标记内?
答案 0 :(得分:6)
如果您可以修改HTML,最好的解决方案是使用<![CDATA[
和]]>
开始和结束标记将您的JavaScript代码包装为CDATA部分。这将使文档成为有效的XML,因此可以通过XML解析器进行解析。
<script>
// <![CDATA[
if (a < b) {
alert(a);
}
// ]]>
</script>
答案 1 :(得分:1)
如果您使用的是XML解析器,请使用CDATA作为脚本。
答案 2 :(得分:0)
下面是一种在给定的XHTML代码段中转义脚本的方法。
此代码:
<?php
$code = <<<'CODE'
<script>
if (a < b) {
alert(a);
}
</script>
<div>
hello
</div>
CODE;
echo preg_replace(
'@(\<script(?:\s+[^>]*)?\>)([[:alnum:][:punct:][:space:]]+)(\</script\>)@',
"\\1\n//<![CDATA[\n\\2\n//]]>\n\\3",
$code);
产生这个:
<script>
//<![CDATA[
if (a < b) {
alert(a);
}
//]]>
</script>
<div>
hello
</div>