Кто декодирует строку запроса, ЯП или браузер?

266
27 января 2017, 08:40

Всем привет.

Заметил такую штуку, что если я передаю строку через GET:

?server=Super Server + GF -

Я в php вывожу значение $_GET['server'], и получаю:

Super Server   GF -

Получается, что php сам делает urldecode(), при выводе $_GET, и как положено заменяет + на пробел.

Но вот вопрос, это настройка какая - то, или особенность php? Или это настраивается в Apache?

Просто сейчас, что бы мне передать в GET знак + - мне нужно через JS сделать:

encodeURIComponent('Super Server + GF -')// Super%20Server%20%2B%20GF%20-

И только в таком случае, php мне выведет:

Super Server + GF -

Если передать в GET:

&test=a+a

При выводе мы получим:

echo $_GET['test'];//a a
echo urldecode( $_GET['test'] );//a a

Получается, что php все-таки декодирует строку запроса...

И я вот не понимаю, это браузер декодирует строку и передает её на сервер, или сервер декодирует строку?

Answer 1

Сервер не кодирует GET, POST, PUT, etc... запросы, мы собираем и в ручную, а после этого браузер формирует тело запроса, автоматически добавляет нужные заголовки и посылает на сервер.
Нам нужно кодировать параметры самим.

В вашем случае когда вы отправляете не кодированную строку вида:

?server=Super Server + GF -

Браузер видит + и заменяет на пробел, так как все пробелы это +, а +-пробел или %20.
По этому если на сервере, сделать так:

urlencode($_GET['server]);

Мы получим:

Super+Server+++GF+-

А если так:

rawurlencode($_GET['server']);

Мы получим:

Super%20Server%20%20%20GF%20-

А если отправляем так:

encodeURIComponent('Super Server + GF -')

То уже нужно сделать так:

rawurldecode($_GET['server'])

Получаем:

Super Server + GF -

То, что нам было нужно, а вообще советую более детально изучить спецификацию кодирование и декодирование строк.

А так-же почитайте в чем отличие между js encodeURI и encodeURIComponent, а так-же в php urldecode и rawurldecode.

READ ALSO
Невозможно создать форму html [требует правки]

Невозможно создать форму html [требует правки]

Вся суть вопроса в изображенииОбратите внимание на строку 84

302
Ошибка во вход админ. панели в WordPress

Ошибка во вход админ. панели в WordPress

Был перенесен сайт на другой хостингВыдает ошибку:

317
Как узнать url файла php?

Как узнать url файла php?

Я делаю регистрация в своем андроид приложении,и мне нужно обратиться к php-файлу на хостинге,но я не знаю как узнать url к этому файлу

333
Разница между переменными в PHP и JS

Разница между переменными в PHP и JS

ЗдравствуйтеСкажите, пожалуйста, права ли я

327