セキュリティ上の理由で preg_replace が制限されている環境での代替関数
preg_replace 関数は使い方によっては任意のコードを実行できる脆弱性を生むことがあるため、php.ini の disable_functions によって使用を禁止されている場合がある。
しかしライブラリ中でも preg_replace が使われる機会は多い。そこで次の関数を定義する。(PHP 5 >= 5.3.0)
<?php function preg_replace2($pattern, $replacement, $subject, $limit = -1, &$count = '__preg_replace2_args_4') { if ($count === '__preg_replace2_args_4') { unset($count); } return preg_replace_callback($pattern, function() use($replacement) { return $replacement; }, $subject, $limit, $count); } // test echo preg_replace2('{/usr\b}', '/opt', '/usr/local/bin/php:/usr/local/bin/ruby', -1, $count); echo '<br>', $count;
ToDo
- “\1” などによる参照を展開する