preg_replace添加<和>自动,但这很奇怪?

时间:2013-02-24 20:09:53

标签: php preg-replace

我明白了:

$_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>>

正如您所看到的,它增加了额外的&lt;和&gt; ..如果我删除了小于号和大号符号,所以它说:

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

然后它将返回:

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

有人知道为什么会这样吗?

3 个答案:

答案 0 :(得分:2)

在这种情况下,最好使用str_replace,而不是preg_replace

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

答案 1 :(得分:1)

preg_replace失败,因为您忘记了delimeters

preg_replace("#</body>#",

答案 2 :(得分:1)

您正在使用preg_replace,这要求第一个参数是PCRE模式。这些模式由delimiters括起来。您尚未添加任何分隔符,但它会将<>视为分隔符,因此这些分隔符不会被视为您要匹配的模式的一部分。

基本上,它不是添加额外字符,它只是不像您想象的那样匹配。

正如加斯卡指出的那样,如果你实际上没有使用任何正则表达式,你也可以使用str_replace