我明白了:
$_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>>
有人知道为什么会这样吗?
答案 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
。