[PHP-users 27502] Re: 正規表現について

shin-1@ca2.so-net.ne.jp shin-1 @ ca2.so-net.ne.jp
2005年 11月 15日 (火) 16:01:41 JST


  nomotoです。

>> > 正規表現のpreg_replace関数またはmb_ereg_replacを使用した場合、
>> > 置換処理時に、関数を通す事は不可能なのでしょうか?
>
>preg_replace関数であれば perl と同じく e 修飾子を使うことができるようですが、
>以下のようなコードを実行した場合に文字列中の関数が実行されてしまうので、
>セキュリティーホールになります。
>
>ですので後方参照変数をダブルクォートで囲む必要があります。
>
>preg_replace('/(.+)/e', '"$1"', $str);
>preg_replace('/(.+)/e', 'func("$1")', $str);

今回、はじめて/e 修飾子があることを知りました。eval処理してしまう
とは怖いですね。

preg_replace_callbackというのがあるようなので、こちらを使うほうが
安全ではないでしょうか。
preg_replace_callback('/(.+)/', 'func', $str);

http://www.php.net/manual/ja/function.preg-replace-callback.php


PHP-users メーリングリストの案内