POSIX 正規表現関数が PHP 5.3.0 から非推奨になっている
第11回■制御文字や不正な文字エンコーディングによるぜい弱性を知ろうという記事に、以下のような記述があったので、PHP マニュアルを調べていました。
PHPなどのマニュアルを見ても,関数ごとにバイナリ・セーフに関する説明がないからだ。ereg関数のリファレンスにも,eregがバイナリ・セーフでないことは説明されていない。
http://itpro.nikkeibp.co.jp/article/COLUMN/20090518/330215/?ST=security&P=2
その時に気付いたのですが、POSIX 正規表現関数(ereg(), ereg_replace(), split(), ...)が非推奨になっていました。マニュアルでは3ヶ月以上前に更新されていたようです。
PHP 5.3.0RC2 で確認してみたところ、E_DEPRECATED が発生しました。
POSIX 正規表現関数は preg_* や mb_ereg_* に置き換えていった方が良さそうです。
$ php -v PHP 5.3.0RC2 (cli) (built: May 9 2009 08:27:20) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies $ php -r 'var_dump( ereg("a", "abc") );' PHP Deprecated: Function ereg() is deprecated in Command line code on line 1 Deprecated: Function ereg() is deprecated in Command line code on line 1 int(1)
ちなみに、冒頭の引用での記述については、以下のページに、POSIX 正規表現関数はバイナリセーフでないことが記載されています。個々の関数リファレンスにはバイナリセーフかどうかは載っていないので、記述が間違っているわけではありません。
これらの正規表現関数はバイナリセーフではありません。PCRE関数はバイナリセーフです。
http://php.net/intro.regex