Кодированный JQuery Url неправильно декодируется в PHP

0

Я использую.ajax() для отправки запроса на сервер. Для обработки запроса сервер использует PHP.

Согласно php urldecode, $ _REQUEST уже декодирован, а символы Plus ('+') декодируются на символ пробела.

Я обнаружил, что символы Plus декодируются на символ подчеркивания ('_'). Это верно как для +, так и для %20. Есть ли способ обойти это? Это кажется неожиданным поведением.

Пример кода, для чего его стоит:

Ajax:

$.ajax({
       url: 'mySite.php',
       method: 'POST',
       data: $(this).serialize()
    });

PHP:

$myVar = "Veh #";
if (isset($_REQUEST["$myVar"])){
//do stuff
}
//to see request
var_dump($_REQUEST);

Var_dump дает

array (1) {["Veh _ #"] => string (1) "6"}

Я ожидаю, что это будет

array (1) {["Veh #"] => string (1) "6"}

fiddler:

Veh+% 23 = 6

Теги:

2 ответа

1
Лучший ответ

Я могу быть некорректным, поскольку я все еще изучаю PHP, но я думаю, что это стандартное поведение при использовании GET и POST в PHP.

см. здесь в документации

http://www.php.net/manual/en/language.variables.external.php

Я вообще не знаю об этом.

также см. этот вопрос

Получите PHP, чтобы остановить замену. символов в массивах $ _GET или $ _POST?

  • 0
    Ах, путаница была из-за того, что я читал "Плюс символы ('+') расшифровываются до пробела" и не читая, что "Точки и пробелы в именах переменных преобразуются в подчеркивания. Например, <input name =" ab "/> становится $ _REQUEST [" a_b "]." Что немного раздражает.
  • 0
    точно, это немного сбивает с толку при первом разборе, но имеет смысл, как только вы его переварите.
0

Заметка:

Точки и пробелы в именах переменных преобразуются в символы подчеркивания.

(php.net - внешние переменные)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню