Форма PHP автоматически экранирует опубликованные данные? - PullRequest
1 голос
/ 31 марта 2009

У меня есть HTML-форма, размещаемая на странице PHP.

Я могу прочитать данные, используя переменную $ _POST в PHP.

Однако все данные, по-видимому, экранированы.

Так, например

запятая (,) =% 2C двоеточие (:) =% 3a косая черта (/) =% 2

поэтому такие простые URL-адреса, как http://example.com, будут размещены как http% 3A% 2F% 2Fexample.com

Есть идеи о том, что происходит?

Ответы [ 3 ]

3 голосов
/ 31 марта 2009

На самом деле вы хотите urldecode. % xx - это кодировка URL, а не html. Реальный вопрос в том, почему вы получаете эти коды. PHP обычно декодирует URL-адрес для вас, поскольку он анализирует запрос в переменных $ _GET и $ _REQUEST. POSTed формы не должны быть urlencoded. Можете ли вы показать нам часть кода, генерирующего форму? Возможно, по какой-то причине ваша форма кодируется при выходе.

См. Предупреждение на этой странице: http://us2.php.net/manual/en/function.urldecode.php

0 голосов
/ 31 марта 2009

Этого не должно быть, и хотя вы можете исправить это вручную с помощью urldecode () ing, вы, вероятно, будете прятать основную ошибку в другом месте, которая может появиться позже и укусить вас.

Хотя при отправке формы с использованием типа содержимого по умолчанию 'application / x-www-form-encoded' значения внутри нее кодируются в URL (% xx), PHP отменяет это для вас, когда делает значения доступными в массиве $ _POST [].

Если после этого вы все еще получаете нежелательные последовательности% xx, должен существовать еще один уровень ручного кодирования URL, которого там быть не должно. Вам нужно найти где это. Если это скрытое поле, может быть, страница, которая его генерирует, случайно кодирует его, используя urlencode () вместо htmlspecialchars (), или что-то еще? Размещение некоторого примера кода в Интернете может помочь нам узнать.

0 голосов
/ 31 марта 2009

Вот простой цикл PHP для декодирования всех переменных POST

foreach($_POST as $key=>$value) {
    $_POST[$key] = urldecode($value);
}

Вы можете получить к ним доступ в обычном режиме, но правильно декодировать. Я, однако, использовал бы другой массив для их хранения, поскольку я не хотел бы загрязнять суперглобальные объекты (я считаю, что они всегда должны иметь точные данные в них, как в PHP).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...