preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

Сегодня при установке старенького шаблона для Virtuemart 2, столкнулся с ошибкой «preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead». Выяснилось, ошибка связана с тем, что в последних версиях PHP 5 убрали поддержку preg_replace() и заменили её на preg_replace_callback. Решение оказалось довольно простым, может кому-то пригодится.Файл: /libraries/joomla/filter/input.php

// Convert decimal
Было: $source = preg_replace('/&#(\d+);/me', "utf8_encode(chr(\\1))", $source); // decimal notation
Стало: $source = preg_replace_callback('/&#(\d+);/m', function($m){return utf8_encode(chr($m[1]));}, $source); // decimal notation
// Convert hex
Было: $source = preg_replace('/([a-f0-9]+);/mei', "utf8_encode(chr(0x\\1))", $source); // hex notation
Стало: $source = preg_replace_callback('/([a-f0-9]+);/mi', function($m){return utf8_encode(chr('0x'.$m[1]));}, $source); // hex notation

После этого, ошибка должна уйти.


Комментариев: 3 на preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

Комментировать