PHP:替换<某些标签之间?

时间:2012-10-13 14:37:40

标签: php preg-replace replace

在PHP中,我有一个包含HTML和javascript的模板:

<script>
  if (a < b) {
    alert(a);
  } 
</script>
<div>
  hello
</div>

使用loadXML方法将其输入到DOMDocument中,但由于脚本中包含<字符,因此会产生错误。我知道我可能会使用loadHTML方法,但是现在我只需要一个快速修复来取代&lt; script标记内的字符,然后再用<

替换它

所以问题是,替换<字符的最佳方法是什么,但只在script标记内?

3 个答案:

答案 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>