![]() |
|
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]()
|
|
| skyboy |
|
||||||||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 8 Всего: 260 |
есть код:
выдает ошибку:
По-видимому, я просто не понимаю, как работает выполнение кода в preg_replace. Ведь код
срабатывает. а код
выводит
Откель рога растут? Что я неверно понимаю? Добавлено @ 16:03 учитывая, что символа "\" не было в начальной строке
подумал было нехорошее на magic_quotes. Механизм оказался включенным. Но после отключения ничего не изменилось - та же ругань на те же ошибки в тех же местах. |
||||||||||||
|
|||||||||||||
| Bikutoru |
|
||||
|
Увлекающийся ![]() ![]() Профиль Группа: Участник Сообщений: 522 Регистрация: 24.5.2005 Где: Москва Репутация: 3 Всего: 22 |
Похоже, кавычки в найденном фрагменте текста предварительно экранируются. По крайней мере такой вариант
отрабатывает просто отлично. Правда, смысл модификатора e здесь не ясен. Сам этот модификатор нужен для того, чтобы как-то обработать полученные результаты. Например так:
Добавлено @ 16:26 См. также http://ru.php.net/manual/ru/function.preg-replace.php#39713 -------------------- Человек, словно в зеркале мир — многолик, Он ничтожен — и он же безмерно велик! Омар Хайям |
||||
|
|||||
| mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 9 Всего: 54 |
skyboy, проблема в том, что в строке поиска используются кавычки.
модификатор /e - заставляет PHP интерпритировать второй параметр функции preg_replace как PHP код. Вообще этот модификатор работает только с функцией preg_replace. Но по своей природе он очень не совершенен, т.к. он выполняет код после подстановки значений, из-за этого возникают проблемы. Советую для этих целей использовать функцию preg_replace_callback() -------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 8 Всего: 260 |
похоже. но magic_quotes отключен, а вставить strip_slashes можно только, если интерпретатор не будет валиться ещё до выполнения strip_slashes. а он, зараза, валится :( в принципе, можно сначала просто заменить, потом убрать экранирование, а потом "вручную" вызвать eval. но хочется понять, что я не так понял в работе preg_replace а смысл мне приводить немаленький кусок(чтоб всё было и можно было выполнить скрипт без "додумывания" недостающего) кода, в котором использование "е" оправдано, коль даже в таком маленьком куске ошибка воспроизводится? конечно, пример немного надуман |
|||
|
||||
| skyboy |
|
||||||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 8 Всего: 260 |
да я понимаю у меня есть обходные пути. просто не понимаю, почему такая ерунда :(
а
невалидный РНР код?
спасибо(а ведь читал коменты! :(). в таком случае можно обойти извратом(только сейчас пришло в голову, когда выяснилось, что добавление слешей к кавычкам - нормальная практика для preg_replace)
|
||||||||||
|
|||||||||||
| mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 9 Всего: 54 |
Не имеет значение включен magic_quotes или нет. При использовании модификатора /e автоматически применяется функция - addslashes() -------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
| skyboy |
|
||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 8 Всего: 260 |
но в доку ментации этого нет :( только в комментарии к документации, за ссылку на который спасибо Bikutoru. А magic_quotes просто была одним из вариантов. Добавлено @ 17:25
ну, почти так. ведь в данном случае eval не вернет результат и выводить будет нечего. я про сам подход. да уж. лучше preg_reaplce_callback |
||||
|
|||||
| mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 9 Всего: 54 |
Это правильно Это точно -------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 8 Всего: 260 |
спасибо тому, кто пометил вопрос решенным
Добавлено @ 18:58 Bikutoru, mishaSL, ребят, спасибо за помощь. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Тексты | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |