2013-02-24 47 views
-2

我得到这个:preg_replace自动添加< and >,但它很奇怪?

$_response_body = preg_replace("</body>","<script>alert('test');</script><br /></body>",$_response_body); 

它应该写:

<script>alert('test');</script><br /> 
</body> 

但事实并非如此。如果我删除小于号和伟大 - 比符号所以说

<<script>alert('test');</script><br /></body>> 

正如你所看到的,它增加了一个额外的<和> ..:

script>alert('test');</script 

然后将其写入回报它将返回:

<script>alert('test');</script<br /></body>> 

有人知道为什么会发生这种情况?

+0

使用'str_replace()'而不是 – 2013-02-24 20:18:48

回答

2

在这种情况下,它会更好地利用str_replace函数,而不是preg_replace函数

str_replace("</body>","<script>alert('test');</script><br /></body>",$_response_body); 
+0

谢谢你,你是男人。我从来没有想过str_replace ...非常感谢。 – MortenMoulder 2013-02-24 20:16:43

1

preg_replace失败,因为你忘了delimeters

preg_replace("#</body>#", 
1

您使用的是preg_replace,它需要第一个参数为PCRE模式。这些模式由delimiters包含。您没有添加任何分隔符,但它会将<>作为分隔符,因此这些不会被视为您的匹配模式的一部分。

基本上,它不是加上多余的字符,它只是不符合你想象的那么多。

正如gaskar指出的那样,如果您实际上没有使用任何正则表达式,那么您也可以使用str_replace