如何在php中使用<script> </script>之外的preg_replace

时间:2010-01-28 21:04:43

标签: php preg-replace

我有一个字符串:

$source = '&
<script type="text/javascript">&</script>
&
<script type="text/javascript">&</script>
&';

期望的结果是:

&amp;
<script type="text/javascript">&</script>
&amp;
<script type="text/javascript">&</script>
&amp;

我尝试:

echo preg_replace("#&(?!amp;)(?!<\/script>)(?![^<]script.*?>)#i",
                  "&amp;", $source);

但我只能取代第一个“&amp;”或者他们都被替换了。

我怎样才能得到这个结果?

修改1:

现在,如果我有一个字符串:

$source = '&
<script type="text/javascript">text&text</script>
&
<script type="text/javascript">&</script>
&';

期望的结果是:

&amp;
<script type="text/javascript">text&text</script>
&amp;
<script type="text/javascript">&</script>
&amp;

3 个答案:

答案 0 :(得分:2)

试试这个

$output = preg_replace("/&(?!amp;)(?!<\/script>)(?![^<]script.*?>)/", "&amp;", $source);

答案 1 :(得分:1)

已经使用正则表达式停止它。请。我不能再忍受了。我的头疼,但只是因为我在我的桌子上敲打它。

我建议使用DOMDocumentSimpleXmlElement来解析字符串,然后循环遍历每个非脚本标记以对每个&符号进行编码。

答案 2 :(得分:0)

使用g修饰符全局替换您的匹配(每次出现)。

echo preg_replace("#&(?!amp;)(?!<\/script>)(?![^<]script.*?>)#ig",
                  "&amp;", $source);