共用サーバにある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)
ピンバック: wordpressで投稿ページの画面が真っ白になった時の対処法