preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
wp-content/plugins/brBrbr300/brBrbr.php:24
Wordpressの「brBrbr」 プラグインですが、上記のようなワーニング(エラー)が出ているので、対応してみました。
PHP 5.5.0 以降で "\e" 修飾子を使うと、 E_DEPRECATED レベルのエラーが発生します。 PHP 7.0.0 以降では E_WARNING レベルのエラーが発生し、 "\e" 修飾子は何の効力も持たなくなります。
7.0.0 /e 修飾子をサポートしなくなりました。かわりに preg_replace_callback() を使いましょう。
5.5.0 /e 修飾子が非推奨になりました。かわりに preg_replace_callback() を使いましょう。 セキュリティ上のリスクの関する詳細は PREG_REPLACE_EVAL のドキュメントを参照ください。
PHP: preg_replace - Manual
原因はこれですね。
preg_replace_callback関数に置き換えればOKみたいです。
対処方法
■修正前$brbr = preg_replace('/(<form.*?>)(.*?)<\/form>/ise', "clr_br('$0')", $brbr);
■修正後
$brbr = preg_replace_callback('/(<form.*?>)(.*?)<\/form>/is', function($m) {return clr_br($m[0]);}, $brbr);
数か所ありますが、すべて同じような変更になるかと思います。
preg_replace_callbackに置き換えて、anonymous function(無名関数)を使用して修正後のように書き換えるだけです。
参考:
・PHP7でpreg_replaceのe修飾子の挙動が変わるので要注意です。 - Qiita
・php - Replace deprecated preg_replace /e with preg_replace_callback - Stack Overflow
・PHPのpreg_replace()で「The /e modifier is deprecated」となる場合の対処方法: 小粋空間
・PHP: preg_replace_callback - Manual
2つめ、3つめの変更方法を参考にしました。
関係ない話
「brBrbr」 プラグインは、最近は使ってない人のほうが多いんでしょうか?英語圏のBloggerとかでも、「Enter キーを押して改行 」とかをサポートしてるんですけどね。
補足:brBrbrのPHP7対応
■修正前$brbr = preg_replace('/(<pre.*?>)(.*?)<\/pre>/ise', "clr_br('$0')", $brbr);
$brbr = preg_replace('/(<script.*?>)(.*?)<\/script>/ise', "clr_br('$0')", $brbr);
$brbr = preg_replace('/(<form.*?>)(.*?)<\/form>/ise', "clr_br('$0')", $brbr);
■修正後
$brbr = preg_replace_callback('/(<pre.*?>)(.*?)<\/pre>/is', function($m) {return clr_br($m[0]);}, $brbr);
$brbr = preg_replace_callback('/(<script.*?>)(.*?)<\/script>/is', function($m) {return clr_br($m[0]);}, $brbr);
$brbr = preg_replace_callback('/(<form.*?>)(.*?)<\/form>/is', function($m) {return clr_br($m[0]);}, $brbr);
こんな感じになる。
スポンサーリンク
コメントを残す