Ошибка в preg_replace

Yurecm
На сайте с 25.02.2007
Offline
233
698

Пришлось из-за сильного вируса перенести сайт на другой хостинг.

Возникла ошибка в строке 45

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/u95507/siteru/www/cat.php on line 45

в строке 45 следующее

$url = preg_replace( "~^[a-z]+~ie","strtolower('\\0')", $url );

В целом кусок кода вот

function checkurl($url) {


$url = trim( $url );
if( strlen( $url ) == 0 ) return 1;

if ( !preg_match("~^(?:(?:https?|ftp|telnet)://(?:[а-яa-z0-9_-]{1,32}".
"(?::[а-яa-z0-9_-]{1,32})?@)?)?(?:(?:[а-яa-z0-9-]{1,128}\.)+(?:com|net|".
"org|mil|edu|arpa|gov|biz|info|aero|inc|name|рф|[a-z]{2})|(?!0)(?:(?".
"!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[а-яa-z0-9.,_@%&". "?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i", $url, $ok))
return -1;

if ( !strstr( $url,"://" ) ) $url = "http://".$url;
$url = preg_replace( "~^[a-z]+~ie","strtolower('\\0')", $url );
return $url;

}

На денвере все работает, здесь именно глюк на другом хостинге!

Как исправить эту ошибку?

Заранее спасибо, плюсом :)

Aisamiery
На сайте с 12.04.2015
Offline
318
#1

Понизить версию php самый простой вариант. Отключить показ уведомлений.

Deprecated не ошибка, это уведомление о том, что в след версиях этот функционал будет удален. В вашем случае ругается на модификатор e

В php 5.5 Модификатор /e теперь считается устаревшим. Используйте функцию preg_replace_callback(). Смотрите документацию PREG_REPLACE_EVAL с дополнительной информацией и описанием проблем с безопасностью.

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
K0
На сайте с 01.09.2016
Offline
72
#2

$url = preg_replace_callback( "~^[a-z]+~i",function ($matches) { return strtolower($matches[0]); }, $url );
Yurecm
На сайте с 25.02.2007
Offline
233
#3

Aisamiery, kom09, спасибо! +1

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий