Я нахожусь в процессе миграции с PHP5.x на PHP 7.2, и часть моей функции конвертации ссылок генерирует предупреждение:
Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
Вот функция, которая вызывает предупреждение:
function linkify($str) {
$ret = ' ' . $str;
$ret = preg_replace("#(^|[\n ])([\w]+?://[\w]+[^ \"\n\r\t<]*)#ise", "'\\1<a class=\"offsite\" href=\"\\2\" target=\"_blank\" rel=\"nofollow\" >\\2</a>'", $ret);
$ret = preg_replace("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#ise", "'\\1<a class=\"offsite\" href=\"http://\\2\" target=\"_blank\" rel=\"nofollow\" >\\2</a>'", $ret);
$ret = preg_replace("#(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a class=\"offsite\" href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
$ret = substr($ret, 1);
return($ret);
}
Я получаю 2 одинаковых предупреждения, одно для первого preg_replace, другое для второго.Почему-то третье не вызывает предупреждение.
Если я не слепой, он не использует модификатор / e, поэтому я не могу понять, в чем причина проблемы.