$_POST экранирование ‘, » в PHP

#php

#php

Вопрос:

У меня повторяющаяся проблема с созданием форм, обрабатываемых PHP: символы ' и " всегда экранируются .
Похоже, это происходит еще до того, как данные попадают в PHP, в $_POST массив.
Поэтому, когда я вставляю ' " в форму и печатаю ее с помощью PHP, я получаю ' " \ .
Что является причиной этого и какое есть решение?

Комментарии:

1. PHP должен отменить их. где вы сталкиваетесь с тем, что это неправильно?

2. @DanielA. Белый В принципе, я получаю printed на своей странице, когда я echo получаю значение из $_POST

Ответ №1:

Вы magic_quotes включили на своем сервере.

Убедитесь сами с var_dump(get_magic_quotes_gpc()) помощью . Если он печатает 1 , они включены.

Отключите их и обработайте экранирование самостоятельно в контексте, в котором это требуется.

Комментарии:

1. Это правильно. Волшебные кавычки уже давно устарели и, скорее всего, будут удалены в одном из последующих выпусков PHP, поэтому рекомендуется никогда не полагаться на волшебные кавычки. Также волшебные кавычки часто создают больше проблем, чем решают.

2. @Hikaru-Shindo @alex Спасибо за ответ. Боюсь, на данный момент я не могу их отключить, хотя я буду помнить о вашей ссылке. Пока я не проработаю это с администраторами моего сервера, я буду использовать stripslashes()

3. В настоящее время вы можете использовать set_magic_quotes_runtime() .

Ответ №2:

Проверьте свой php.ini, похоже, что для magic_quotes_gpc установлено значение On . Это приведет к поведению автоматического экранирования. Установите для него значение Off, чтобы отключить это поведение.

Ответ №3:

 $_POST = array_map("stripslashes", $_POST);
  

Ответ №4:

Вы можете вызвать stripslashes функцию, чтобы удалить косые черты из вывода post. Я думаю, что ваша проблема может быть связана с «волшебными кавычками» или подобными (сейчас устарели):

http://php.net/manual/en/security.magicquotes.php