Каковы точные правила / функция PHP для кодирования строк в POST-массивах? - PullRequest
1 голос
/ 27 мая 2010

Просто начинаю заниматься PHP веб-разработкой. У меня есть HTML-форма, где пользователь проверяет некоторые серии динамически генерируемых флажков и отправляет через POST. На стороне PHP я хочу проверить, какие из флажков были нажаты.

У меня есть массив $ full_list, и я делаю что-то вроде

$selected_checkboxes = array_filter($full_list, function($item) {
    array_key_exists($item, $_POST);
  }

У меня возникают проблемы при названии элемента списка, например «Арахисовое масло», поскольку в массиве POST он называется «Peanut_Butter».

Конечно, я мог бы просто str_replace "" с "_" перед проверкой array_key_exists, но я представляю, что здесь есть более фундаментальная проблема кодирования; в частности, я не уверен, какой именно слой преобразует обычные строки в формах HTML (value = "Peanut Butter") в "Peanut_Butter".

Итак:

  • какой слой отвечает за это преобразование? Это браузер?
  • Каковы точные правила преобразования, и есть ли функция PHP, которая будет копировать это точное преобразование?

Ответы [ 2 ]

3 голосов
/ 10 августа 2015

Принятый ответ Байрона Уитлока неверен. PHP действительно виновник здесь. См. руководство по PHP :

Точки и пробелы в именах переменных преобразуются в подчеркивания. За пример <input name="a.b" /> становится $_REQUEST["a_b"].

Также см. Ответы на аналогичный вопрос .

0 голосов
/ 27 мая 2010

PHP не делает этого. На стороне клиента есть что-то, что преобразует пробелы в подчеркивание.

Браузер должен кодировать каждую переменную, используя эквивалент urlencode () . PHP автоматически расшифрует эти строки, чтобы они были прозрачны для программиста.

редактировать Эквивалентом в javaScript является escape () . Но очень вероятно, что есть некоторый js-код, который вручную преобразует пробелы в подчеркивания.

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