-2

我懂了:

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

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

4

3 回答 3

2

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

str_replace("</body>","<script>alert('test');</script><br /></body>",$_response_body);
于 2013-02-24T20:15:08.390 回答
1

preg_replace失败,因为您忘记了定界符

preg_replace("#</body>#",
于 2013-02-24T20:16:12.977 回答
1

您正在使用preg_replace,它要求第一个参数是 PCRE 模式。这些模式由分隔符包围。您没有放入任何分隔符,但它会将<and>视为分隔符,因此这些不被视为您匹配的模式的一部分。

基本上,它并没有添加额外的字符,它只是没有像你想象的那样匹配。

正如gaskar 指出的那样,如果您实际上没有使用任何正则表达式,那么您不妨只使用str_replace.

于 2013-02-24T20:17:15.940 回答