Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: некорректно обрабатывается символ &
Форумы портала PHP.SU » PHP » Программирование на PHP » некорректно обрабатывается символ &

Страниц (1): [1]
 

1. steamer - 09 Мая, 2010 - 00:15:24 - перейти к сообщению
Добрый день. Некорректно обрабатывается символ &.
Достаю текст из БД, там есть &qout; при этом в исходно коде готовой страницы стоит &qout; и текст далее.
Структура файлов такова:
Основной файл, в нем создается класс для работы с базой, само тело класса храниться в инклудном файле. Значение из метода не возвращается, текст выводится при помощи эхо из самого метода.

Как избавиться от этой замены.
p/s Проверял, в самом классе после вытаскивания текста из базы еще символ &. Т.к. preg_replace на замену &amp не действует, а если просто указать preg_replace("/\&/", "", $text), то символ удаляется. Значит это происходит где то на этапе передачи данных из метода в основной документ.
2. valenok - 09 Мая, 2010 - 01:03:09 - перейти к сообщению
Проверьте символы <>" . Если они тоже превращаются в html сущности, то ищите в коде какой нибудь htmlspecialchars
3. Champion - 09 Мая, 2010 - 08:25:24 - перейти к сообщению
steamer пишет:
preg_replace на замену &amp не действует
Может быть нужно применять preg_replace просто в более поздней точке программы, когда &amp уже появился?

А вообще, действительно, похоже, что 2 раза работает htmlspecialchars / htmlentities / что-то самодельное. Либо 2 раза после выборки, либо один раз перед вставкой и один раз после выборки. Надо это отыскать.
steamer пишет:
Проверял, в самом классе после вытаскивания текста из базы еще символ &.
Значит 2 раза после выборки.
4. steamer - 09 Мая, 2010 - 13:25:31 - перейти к сообщению
htmlspecialchars этих функций нет. Я сам писал код, и не обрабатывал этими функциями.
Решение нашел.
Отключил magic_quotes и после этого можно стало корректно заменять из любого места preg_replace ("/\&quot;/",'"', $var);
5. JustUserR - 09 Мая, 2010 - 15:30:00 - перейти к сообщению
steamer пишет:
Отключил magic_quotes и после этого можно стало корректно заменять из любого места
В принципе можно было скомбинировать функции stripslahes и html_entity_decode для получения схожего результата
6. Champion - 09 Мая, 2010 - 16:01:40 - перейти к сообщению
Никогда не видел, чтоб волшебные кавычки заменяли что-то на html-сущности. Странно как-то.
steamer пишет:
preg_replace ("/\&quot;/",'"', $var);
Вот это по сути html_entity_decode. В любом случае, не стоит использовать регулярнуе выражения, когда строка замены не одержит никаких выкрутасов.
7. JustUserR - 10 Мая, 2010 - 01:05:46 - перейти к сообщению
Champion пишет:
Никогда не видел, чтоб волшебные кавычки заменяли что-то на html-сущности. Странно как-то. Вот это по сути html_entity_decode
Конечно сами magic_quotes никак не взаимодействуют с html-сущностями и занимаются обычным экранированием строки - однако если данные сначала были обработаны лишний раз magin_quotes и стали в виде \" а после чего к ним был применен htmlentities - то очевидно для получения оригинальной строки потребуется такая же двойная расшифровка

 

Powered by ExBB FM 1.0 RC1