-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

この場合、preg_replace の代わりに str_replace を使用することをお勧めします。

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

preg_replacedelimitersを忘れたため、失敗します。

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

を使用しています。preg_replaceこれには、最初の引数が PCRE パターンである必要があります。これらのパターンは区切り文字で囲まれています。区切り文字を入れていませんが、<and>を区切り文字として扱うため、一致するパターンの一部とは見なされません。

基本的に、余計な文字を追加しているわけではなく、思ったほどマッチしていないだけです。

Gaskar が指摘しているように、実際に正規表現を使用していない場合は、str_replace.

于 2013-02-24T20:17:15.940 に答える