如何使用preg_替换外部<;脚本></脚本>;在php中
我有一根绳子:如何使用preg_替换外部<;脚本></脚本>;在php中,php,preg-replace,Php,Preg Replace,我有一根绳子: $source = '& <script type="text/javascript">&</script> & <script type="text/javascript">&</script> &'; $source = '& <script type="text/javascript">text&text</script> & <s
$source = '&
<script type="text/javascript">&</script>
&
<script type="text/javascript">&</script>
&';
$source = '&
<script type="text/javascript">text&text</script>
&
<script type="text/javascript">&</script>
&';
$source=&
&
&
&
&';
预期的结果是:
&
<script type="text/javascript">&</script>
&
<script type="text/javascript">&</script>
&
&
<script type="text/javascript">text&text</script>
&
<script type="text/javascript">&</script>
&
&;
&
&;
&
&;
我尝试:
echo preg_replace("#&(?!amp;)(?!<\/script>)(?![^<]script.*?>)#i",
"&", $source);
echo preg#u replace(“#&(?amp;)(?!)(?![^)#i”,
“&;”,$source);
但我只能替换第一个“&”,否则它们都被替换了
我怎样才能得到这个结果
编辑1:
现在如果我有一个字符串:
$source = '&
<script type="text/javascript">&</script>
&
<script type="text/javascript">&</script>
&';
$source = '&
<script type="text/javascript">text&text</script>
&
<script type="text/javascript">&</script>
&';
$source=&
文本&文本
&
&
&';
预期的结果是:
&
<script type="text/javascript">&</script>
&
<script type="text/javascript">&</script>
&
&
<script type="text/javascript">text&text</script>
&
<script type="text/javascript">&</script>
&
&;
文本&文本
&;
&
&;
使用g
修饰符全局替换匹配项(每次出现)
echo preg\u replace(“#&(?amp;)(?!)(?![^)#ig”,
“&;”,$source);
使用g
修饰符全局替换匹配项(每次出现)
echo preg\u replace(“#&(?amp;)(?!)(?![^)#ig”,
“&;”,$source);
试试这个
$output = preg_replace("/&(?!amp;)(?!<\/script>)(?![^<]script.*?>)/", "&", $source);
$output=preg_replace(“/&(?amp;)(?!)(?![^)/”,“&;”,$source);
试试这个
$output = preg_replace("/&(?!amp;)(?!<\/script>)(?![^<]script.*?>)/", "&", $source);
$output=preg_replace(“/&(?amp;)(?!)(?![^)/”,“&;”,$source);
请停止使用正则表达式。我再也受不了了。我的头很痛,但只是因为我把它砸在桌子上了
我建议使用或解析字符串,然后在每个非脚本标记之间循环,对每个符号进行编码。请停止使用正则表达式。我再也受不了了。我的头很痛,但只是因为我把它砸在桌子上了
我建议使用或来解析字符串,然后循环遍历每个非脚本标记来编码每个符号。为什么需要对可能包含标记的内容进行编码?如果这是用户输入,那么您会对各种各样的XSS不好之处敞开大门。我使用Yahoo Yui的库和“post request”在XmlHttpRequest for datasources不起作用中,为什么需要对可能包含标记的内容进行编码?如果这是用户输入,那么您会对各种各样的XSS不好之处敞开大门。我使用Yahoo Yui的库和XmlHttpRequest for datasources不起作用中的“post请求”:preg_replace()[函数.preg replace]:未知修饰符“g”不起作用:preg_replace()[function.preg replace]:未知修饰符“g”@Kevin-我在我的服务器上试用过,效果和你预期的一样。你使用的是什么版本?我发现它怎么不起作用,我已经更新了我的问题。我添加了“文本和文本”。当“&”在其他字符之间,正则表达式不起作用。好的,我找到了我最后一条评论的答案。它是“/^&(?!amp;)(?![^)(?!)/”@Kevin-我在我的服务器上试用了它,它能如你所愿工作。你使用的是什么版本?我发现它不起作用,我已经更新了我的问题。我添加了“文本和文本”。当“&”在其他字符之间,正则表达式不起作用。好的,我找到了我最后一条评论的答案。它是“/^&(?!amp;)(?![^)(?!)/”我完全理解你的意思,我计划使用XSLT,但现在我不得不使用这种情况……对不起你的头;)@Christina Toma为什么不呢?如果它像他显示的那样小,那么它将需要最小的解析处理。但是,如果字符串变大(其可能性与开发人员坚持认为不会发生的程度成反比),那么这个解决方案将可以很好地扩展。而dev希望以后使用什么并维护regex?@Lucas-但是为什么不使用公认答案中提供的regex,它比所有DOMDocument处理都快?在您看来,使用DOMDocument有什么好处?@Christina Toma我已经在我的pr中列出了一些很好的理由之前的评论,但这里有几个具体的例子:如果他后来决定他也想摆脱尖括号呢?或者如果他决定他也想跳过嵌入标记呢?在一个大型应用程序中,可维护性和可伸缩性远比微不足道的性能改进更重要。@Lucas-关于mai,你是绝对正确的无能力和可扩展性,但速度在大型应用程序中也非常重要。我完全理解您的意思,我计划使用XSLT,但现在我不得不使用这种情况……对不起,您的头;)@Christina Toma为什么不呢?如果它像他展示的那样小,那么解析时需要最少的处理。但是,如果字符串增长(增长的可能性与开发人员坚称不会发生的程度成反比),那么这个解决方案将可以很好地扩展。而dev希望以后使用什么并维护regex?@Lucas-但是为什么不使用公认答案中提供的regex,它比所有DOMDocument处理都快?在您看来,使用DOMDocument有什么好处?@Christina Toma我已经在我的pr中列出了一些很好的理由之前的评论,但这里有几个具体的例子:如果他后来决定他也想摆脱尖括号呢?或者如果他决定他也想跳过嵌入标记呢?在一个大型应用程序中,可维护性和可伸缩性远比微不足道的性能改进更重要。@Lucas-关于mai,你是绝对正确的它具有灵活性和可扩展性,但在大型应用程序中,速度也非常重要。