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 :: Версия для печати :: twig, обратные слеши
Форумы портала PHP.SU » PHP » Программирование на PHP » twig, обратные слеши

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

1. Gefest - 18 Июня, 2010 - 22:04:39 - перейти к сообщению
Не так давно стал изучать этот шаблонизатор, все бы хорошо, но вот проблема, вывод из базы кавычек, экранированных обратным слешем так и выводятся напрямую, раньше это решалось функцией stripslashes(). Кто-нибудь сталкивался с этой проблемой?
2. alexspb - 18 Июня, 2010 - 22:23:50 - перейти к сообщению
Если стрипслэшис не помогает, может они экранированы уже в базе (вставили уже так)? не пробовали посмотреть на прямую?
3. Gefest - 18 Июня, 2010 - 22:38:26 - перейти к сообщению
Все дело в том, что шаблонизатор не использует эту функцию
4. evgenijj - 19 Июня, 2010 - 04:17:30 - перейти к сообщению
Вообще, использование stripslashes() -- моветон. Не надо добавлять обратные слеши -- и проблема пропадет. Я позволю себе процитировать:
Цитата:
При включенной директиве конфигурации magic_quotes_gpc PHP автоматически добавляет слеши к строковым значениям в массиве $GLOBALS (это относится не только к данным в $_POST, $_GET, $_COOKIE, $_REQUEST, но и к данным в $_SERVER, $_FILES, $_ENV, $_SESSION). Вдобавок, при включенной директиве magic_quotes_runtime, слеши добавляются к данным полученым во время работы скрипта (например, из файла, базы данных).
.....
Проще всего отключить директивы в php.ini:
magic_quotes_gpc = Off
magic_quotes_runtime = Off.
magic_quotes_sybase = Off
.....
В 6 версии PHP от магических закавычиваний отказались и оставленные в целях обратной совметимости get_magic_quotes_gpc и get_magic_quotes_runtime будут всегда возвращать false.


Варианты решения:
1. Обматерить хостера, и указать ему, что все уже давно отказались от "магического" закавычивания
2. Если не поможет -- прописать в .htaccess
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
5. JustUserR - 19 Июня, 2010 - 11:28:37 - перейти к сообщению
Gefest пишет:
Вывод из базы кавычек, экранированных обратным слешем так и выводятся напрямую
Дело в том что экранирование и шифрование данных это вовсе не одно и то же - например у вас есть определенная группа спецсимволов которые будут восприняты парсером как управляющие символы а вам нужно избежать этого Суть шифрование заключается в том что вы производите некоторое изменение исходного текста и исключаете из него спецсимволы по определенному алгоритму - и в таком случае когда вы их извлекаете обратно то нужно делать дешифрование В случае экранирования все спецсимволы помечаются специальным экранирующим символом типа обратного слеша - и в таком случае парсер трактует их не как управляющие символы а как простые сохраняемые данные - однако после того как эти данные прошли парсер и сохранились то в реальном представлении данных они уже будут находится без всяких экранирующих символов - и соответственно при обратном считывании данных и не надо разэкранировать
По этой причине если при считывании данных из БД они находятся в лишнем закэранированном слое - то это значит что при записи данных произошла двойная экранировка - например функцией mysql_real_escape_string и неявной опцией magic_quotes
evgenijj пишет:
Варианты решения
Если хостер предоставляет использование CGI-скриптом - то можно попросту постаить свою версию интерпретатора PHP со своими любыми настройками - и использовать его для обработки PHP-скриптов путем установки собственных Handler-ов в файле .htaccess
6. Gefest - 19 Июня, 2010 - 22:14:24 - перейти к сообщению
Спасибо за советы, попробую.
7. JustUserR - 20 Июня, 2010 - 13:07:44 - перейти к сообщению
Gefest пишет:
Спасибо за советы, попробую.
Пожалуйста! Можете также проверить не используете ли вы специальный класс доступа к БД или функции препарирования - в таком случае данные могут экранироваться автоматически и при попытке ручного экранирования при последующем выводе также будут появляться лишний уровень экранирования
В принципе можно попробовать удалить лишний уровень экранирования и при выводе - для этого включить перед использованием шаблонизатора буферазицию и потом передайте весь сгененированный им HTML-код в фунцию stripslahes - но это нужно деалть осторожно и с предварительной проверкой чтобы не удалить необходимые закэранированные элементы напрмер в JS-коде

 

Powered by ExBB FM 1.0 RC1