Я сейчас перехожу с 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, поэтому я не могу понять, в чем проблема.
@revo, что сработало. Спасибо за помощь.
Пожалуйста, внесите некоторые изменения, предоставленные @Casimir, вы можете проголосовать / принять его ответ ниже.





Здесь модификатор e бесполезен, поскольку preg_replace не ссылается ни на одну функцию в параметре замены. Ты можешь написать:
$ret = preg_replace('#(?<!\S)\w+://\w+[^"\s<]*#', '<a class = "offsite" href = "$0" target = "_blank" rel = "nofollow">$0</a>', $ret);
$ret = preg_replace('#(?<!\S)(?:www|ftp)\.[^"\s<]*#i', '<a class = "offsite" href = "http://$0" target = "_blank" rel = "nofollow">$0</a>', $ret);
$ret = preg_replace('#(?<!\S)[\w&.-]+@(?:[\w-]+\.)+\w+#', '<a class = "offsite" href = "mailto:$0">$0</a>', $ret);
Вроде
eздесь ни на что не влияет. Просто удали его.