「preg_replace_callback()」でURLを正規表現変換

※以前別の場所で書いた文章を備忘的に書き記しておきます。

【投稿年月日】2013-12-19 【ジャンル】PHP/MySQL

 最近操作する機会が多い8インチのWindows8.1タブレットに、「xampp」の最新版をインストールして、運営する某サイトをローカル環境で確認したところ、次のようなエラーが発生しました。
「preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead」
 PHP5.5では「preg_replace()」でe修飾子を使うとエラーが出るようで、代替案として「preg_replace_callback()」を使いなさい、ということらしいです。
 調べたところ「preg_replace()」でe修飾子を使っているのは、某サイトではURLの正規表現変換だけでした。取り合えず、これに対応させたので、備忘録を兼ねてソースを残しておきます。
 

変更前 *「preg_replace()」

<?php
   $uri_p = "/[^=\"\/](https?|ftp):\/\/([[:alnum:]\+\$\;\?\.%,!#~*\/:@&=_-]+)/ei";
   $uri_r = "'<a href=\"\\1://\\2\" target=\"_blank\">'.mb_strimwidth('\\2', 0, 50, '...', 'UTF-8').'</a>'";
   $str = preg_replace($uri_p, $uri_r, $str);
?>

変更後 *「preg_replace_callback()」

<?php
   $str = preg_replace_callback(
    "/[^=\"\/](https?|ftp):\/\/([[:alnum:]\+\$\;\?\.%,!#~*\/:@&=_-]+)/i",
    create_function('$v', 'return " <a href=\"".trim($v[0])."\" target=\"_blank\">".mb_strimwidth($v[2], 0, 50, "...", "UTF-8")."</a> " ; '),
    $str
   );
?>
 運営するほとんどのサイトにおいて、このURL正規表現変換スクリプトを使っているので、面倒ですが修正しなければいけないですね。。。

EDIUNET | PHP/MySQL | 独り言 | 提供サービス | JavaScript