「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);
?>
$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正規表現変換スクリプトを使っているので、面倒ですが修正しなければいけないですね。。。$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
);
?>
EDIUNET | PHP/MySQL | 独り言 | 提供サービス | JavaScript