кодировка URL браузера отличается от кодировки URLEncoder.encode в java - PullRequest
1 голос
/ 22 декабря 2009

У меня есть такой URL: продукт // выдержки? функция = картинка + режим

когда я получаю доступ к этому URL из браузера, серверная часть получает запрос как: "продукт // выписки? Функция = картинка + режим"

В конце веб-сервера я использую + в качестве разделителя. так что функция = картинка + режимы означает, что есть 2 функции: картинка и режимы

Я создал и автоматизировал скрипт (Java), который переходит на URL и получает его содержимое. Когда я запускаю этот скрипт, бэкэнд получает запрос как: "Продукт / B000NK6J6Q / отрывки / функция = картина% 2Bmodes"

Это потому, что внутри моего скрипта (Java) я использую URLEncoder.encode, который преобразует + в% 2B и отправляет этот закодированный URL на сервер.

Почему urlEncoders, предоставляемые Java, и те, что присутствуют в браузерах (FF / IE), отличаются. как мне сделать их такими же? Как мне их декодировать? ('+' в URLDecoder.decode дает место) Кроме того, используется ли «+» в качестве разделителя в соответствии с соглашениями (и спецификациями?)?

Prac

1 Ответ

4 голосов
/ 22 декабря 2009

То, что вы видите, на самом деле правильно. См. Процент кодировки в Википедии. Символ + является зарезервированным символом и поэтому должен быть закодирован как %2B. Кроме того, исторически браузеры используют другую форму процентного кодирования для форм, отправляемых с типом MIME application/x-www-form-urlencoded, где пробелы становятся + вместо %20.

Если вы хотите использовать + в URL, то ваш разделитель должен быть пробелом в бэкэнде. Если вы хотите использовать + в качестве бэкэнда, тогда у вас будет %2B в URL.

...