2012-10-13 119 views
0

在PHP中,我在它与HTML和JavaScript模板:PHP:替换<某些标签之间?

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

这被送入一个DOMDocument与loadXML方法,但这种procudes因为脚本里面的<字符的错误。我知道我可能使用loadHTML方法来代替,但现在我只需要一个快速解决方案,取代了script标签内的<字符,然后用<

所以现在的问题是,什么是后再次更换最好的方法来取代<字符,但只有在script标签里面?

回答

6

如果你可以修改HTML,最好的解决办法是使用<![CDATA[]]>开始和结束标记CDATA节来包装你的JavaScript代码。这将使文档有效的XML,因此可以通过XML解析器进行分析。

<script> 
// <![CDATA[ 

    if (a < b) { 
    alert(a); 
    } 

// ]]> 
</script> 
+0

你打我吧 –

+0

是的,我发现自己已经......但真的不喜欢它。这些模板应该可以为最终用户配置,他们可能不会理解这一点......所以我想让它们更容易些,通过自动添加这些标记或临时替换<字符... – Dylan

+1

如果模板应该由最终用户配置,他们不应该摆弄JavaScript代码,或者应该提供这样的外部文件。除非你特别需要允许他们写JS,那么你应该分开可编辑的部分;一个仅用于HTML,另一个仅用于JS –

1

如果您使用的是XML解析器,请为脚本使用CDATA

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>