ereg_replaceをpreg_replaceに書き換えた

共用サーバにあるPHPのページに、いきなりこんなエラーメッセージが出てきました。
でも、動作が正常です。前にはなかったですけどね。

Deprecated: Function ereg_replace() is deprecated in *****/*****.php on line 18

(*****はPHPのファイル名とパス)
ereg_replaceという関数が使用することが薦めないということですね。
エラーになったPHPコード

$foo = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a href=\"\\0\" target=\"_blank\">\\0</a>", $foo);


調べてみたところ、
http://php.net/manual/ja/migration53.deprecated.php
PHPの公式ドキュメントにPHP 5.3.xにアップデートしてからのことのようです。

1.ereg_replaceをpreg_replaceに書き換える

共用サーバなので、PHPとApacheの設定はできないので、
公式ドキュメントの指示のように、ただ関数名のereg_replaceをpreg_replaceに書き換えた。
すると、下記のエラーになった。

Warning: preg_replace(): Unknown modifier '+' in *****/*****.php on line 18

2.正規表現は「/」から始まって、「/」まで終わる

関数の中の引数に問題があったようです。
http://php.net/manual/ja/function.preg-replace.phpを参考して、
一番目の引数は正規表現で、全部’/hogehoge/’になった。
つまり始めと終わりに「/」があります。

3.正規表現の中の「/」を「\/」に変える

正規表現の中にも問題があった。

Warning: preg_replace(): Unknown modifier '/' in *****/*****.php on line 18

正規表現の中の「/」は「\/」に変えたら、直した。

$foo = preg_replace("/[[:alpha:]]+:\/\/[^<>[:space:]]+[[:alnum:]\/]/","<a href=\"\\0\" target=\"_blank\">\\0</a>", $foo);

ereg()ならpreg_match()に変える

ちなみに、ereg()にもエラーが出たので、一緒に修正した。
修正前:

ereg("HOGEHOGE",$foo)

修正後:

preg_match("/HOGEHOGE/",$foo)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>