| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Тексты > эвуляция кода в preg_replace(модификатор e) |
| Автор: skyboy 15.3.2007, 15:55 | ||||||||||||
есть код:
выдает ошибку:
По-видимому, я просто не понимаю, как работает выполнение кода в preg_replace. Ведь код
срабатывает. а код
выводит
Откель рога растут? Что я неверно понимаю? Добавлено @ 16:03 учитывая, что символа "\" не было в начальной строке
подумал было нехорошее на magic_quotes. Механизм оказался включенным. Но после отключения ничего не изменилось - та же ругань на те же ошибки в тех же местах. |
| Автор: Bikutoru 15.3.2007, 16:22 | ||||
Похоже, кавычки в найденном фрагменте текста предварительно экранируются. По крайней мере такой вариант
отрабатывает просто отлично. Правда, смысл модификатора e здесь не ясен. Сам этот модификатор нужен для того, чтобы как-то обработать полученные результаты. Например так:
Добавлено @ 16:26 См. также http://ru.php.net/manual/ru/function.preg-replace.php#39713 |
| Автор: mishaSL 15.3.2007, 16:27 |
| skyboy, проблема в том, что в строке поиска используются кавычки. модификатор /e - заставляет PHP интерпритировать второй параметр функции preg_replace как PHP код. Вообще этот модификатор работает только с функцией preg_replace. Но по своей природе он очень не совершенен, т.к. он выполняет код после подстановки значений, из-за этого возникают проблемы. Советую для этих целей использовать функцию preg_replace_callback() |
| Автор: skyboy 15.3.2007, 16:50 | ||||||||||
да я понимаю у меня есть обходные пути. просто не понимаю, почему такая ерунда :(
а
невалидный РНР код?
спасибо(а ведь читал коменты! :(). в таком случае можно обойти извратом(только сейчас пришло в голову, когда выяснилось, что добавление слешей к кавычкам - нормальная практика для preg_replace)
|
| Автор: mishaSL 15.3.2007, 16:59 |
Не имеет значение включен magic_quotes или нет. При использовании модификатора /e автоматически применяется функция - addslashes() |
| Автор: skyboy 15.3.2007, 17:18 | ||||
но в доку ментации этого нет :( только в комментарии к документации, за ссылку на который спасибо Bikutoru. А magic_quotes просто была одним из вариантов. Добавлено @ 17:25
ну, почти так. ведь в данном случае eval не вернет результат и выводить будет нечего. я про сам подход. да уж. лучше preg_reaplce_callback |
| Автор: mishaSL 15.3.2007, 18:33 | ||
Это правильно Это точно |
| Автор: skyboy 15.3.2007, 18:57 |
| спасибо тому, кто пометил вопрос решенным Добавлено @ 18:58 Bikutoru, mishaSL, ребят, спасибо за помощь. |