我有一个字符串:
$source = '&
<script type="text/javascript">&</script>
&
<script type="text/javascript">&</script>
&';
期望的结果是:
&
<script type="text/javascript">&</script>
&
<script type="text/javascript">&</script>
&
我尝试:
echo preg_replace("#&(?!amp;)(?!<\/script>)(?![^<]script.*?>)#i",
"&", $source);
但我只能取代第一个“&amp;”或者他们都被替换了。
我怎样才能得到这个结果?
修改1:
现在,如果我有一个字符串:
$source = '&
<script type="text/javascript">text&text</script>
&
<script type="text/javascript">&</script>
&';
期望的结果是:
&
<script type="text/javascript">text&text</script>
&
<script type="text/javascript">&</script>
&
答案 0 :(得分:2)
试试这个
$output = preg_replace("/&(?!amp;)(?!<\/script>)(?![^<]script.*?>)/", "&", $source);
答案 1 :(得分:1)
已经使用正则表达式停止它。请。我不能再忍受了。我的头疼,但只是因为我在我的桌子上敲打它。
我建议使用DOMDocument或SimpleXmlElement来解析字符串,然后循环遍历每个非脚本标记以对每个&符号进行编码。
答案 2 :(得分:0)
使用g
修饰符全局替换您的匹配(每次出现)。
echo preg_replace("#&(?!amp;)(?!<\/script>)(?![^<]script.*?>)#ig",
"&", $source);