mars37
Новичок
Мистика с preg_replace, кто-нибудь сталкивался с таким?
Есть давно использующийся код, с помощью которого из некоторой строки (шаблона страницы) удаляются оставшиеся (необработанные) конструкции типа "{if:NAME}...{/if:NAME}". Вот этот код:
$content = preg_replace("/\{if\
.*?)\}.*?\{\/if\:\\1\}/is", "", $content);
И вдруг пару дней назад попадается текст, для которого это выражение ничего не возвращает. Вернее gettype($content) возвращает "NULL".
Текст обычный, символы латинские, никаких особенностей в нём нет. Этот эффект наблюдался c PHP 5.2.0 и с PHP 5.2.4.
Кто нибудь сталкивался с подобным? Как это побороть?
Для "чистоты" эксперимента этот "проблемный" текст выделен в отдельный файл 1.html и эффект проверялся таким скриптом:
"Проблемный" текст соответствует следующему регулярному выражению:
/[^a-z0-9*#=\/"\'\(\)\:<>\$\!\?,\.&_\-\{\};+@%\|\t\n\r\S\s]{1,}/is
Т.е. никаких особых, ранее не использовавшихся символов нет. (Не ругайте за избыточность: \t\n\r\S\s)...
Когда из текста удалялись все пробелы, preg_replace начинал работать! Если заменять пробелы на что-нибудь, то не работает.
Мистика какая-то...
Есть давно использующийся код, с помощью которого из некоторой строки (шаблона страницы) удаляются оставшиеся (необработанные) конструкции типа "{if:NAME}...{/if:NAME}". Вот этот код:
$content = preg_replace("/\{if\

И вдруг пару дней назад попадается текст, для которого это выражение ничего не возвращает. Вернее gettype($content) возвращает "NULL".
Текст обычный, символы латинские, никаких особенностей в нём нет. Этот эффект наблюдался c PHP 5.2.0 и с PHP 5.2.4.
Кто нибудь сталкивался с подобным? Как это побороть?
Для "чистоты" эксперимента этот "проблемный" текст выделен в отдельный файл 1.html и эффект проверялся таким скриптом:
PHP:
<?
$content = file_get_contents('1.html');
$s = preg_replace("/\{if\:(.*?)\}.*?\{\/if\:\\1\}/is", '*******', $content);
echo htmlspecialchars($s);
?>
/[^a-z0-9*#=\/"\'\(\)\:<>\$\!\?,\.&_\-\{\};+@%\|\t\n\r\S\s]{1,}/is
Т.е. никаких особых, ранее не использовавшихся символов нет. (Не ругайте за избыточность: \t\n\r\S\s)...
Когда из текста удалялись все пробелы, preg_replace начинал работать! Если заменять пробелы на что-нибудь, то не работает.
Мистика какая-то...