19.04.2017 17:03
OlegON
 
В связи с весенним обострением разработчиков PHPвыходом новой версии PHP7, необходимо заменить все preg_replace с модификатором \e на preg_replace_callback. Убил бы, честное слово. Казалось бы, все просто, берешь оригинал
Код:
$string=preg_replace("/:([a-z]{1,10}):/e", "print_smile('\\1')", $string)
и делаешь из него
Код:
$string=preg_replace("/:([a-z]{1,10}):/", function($matches){return print_smile();}, $string)
не слушайте там всяких в интернете, которые предлагают использовать create_function, она тоже deprecated.
Но это все простое, а есть идеи, как вот это в callback перевести без разбивания на две части? :(
Код:
$text = preg_replace(array(
'#<a href="([^"]*)\[([^"]+)"(.*)>(.*)\[\\2</a>#siU',
'#(<[^<>]+ (src|href))=(\'|"|)??(.*)(\\3)#esiU'  
), array(
'<a href="\1"\3>\4</a>[\2',
"sanitize_url('\\1', '\\4', '\\3')"
), $text
);
у меня весь форум в preg_replace, больше 1500 вхождений, уже крыша едет все это переписывать из-за того, что кому-то зачесалось все перевернуть с ног на голову... Задрали...
Судя по всему, никак не обойти, надо бить на части... это еще маленький массив, у меня тут штук двадцать элементов :( Или придется переписывать как-то с preg_replace_callback_array... Если у кого-то есть светлые мысли - прошу поделиться.
20.04.2017 13:27
OlegON
 
И еще для светлых мыслей
Код:
$bbcode = preg_replace('#\[sigpic\](.*)\[/sigpic\]#siUe', '', $bbcode);
это вообще что? Вместо процедуры там '', может и \e вообще не нужен?
02.05.2017 01:59
Клапауций
 
Посмотрите на preg_replace_callback_array
02.05.2017 06:57
OlegON
 
Цитата:
OlegON придется переписывать как-то с preg_replace_callback_array
Цитата:
Клапауций Посмотрите на preg_replace_callback_array
посмотрел же... проблема в том, что нет того, что работало бы так же, как preg_replace раньше.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.