Java URLEncoder меняет спецсимвол? - PullRequest
2 голосов
/ 18 февраля 2010

Я хочу использовать java URLEncoder class для кодирования моих строк URL. Однако по умолчанию он преобразует пробелы в «+» (знак плюс). Я хотел бы, чтобы вместо него использовался '-' (аналогично тому, как этот сайт кодирует свои URL).

Мне интересно, как лучше всего это сделать? Должен ли я просто использовать его встроенную функциональность, а затем заменить строку (от '+' до '-')? Спасибо

Ответы [ 3 ]

5 голосов
/ 18 февраля 2010

URLEncoder кодирует URL в соответствии с конкретным контрактом . Вы можете и должны не изменить его. В самом деле, просто замените строку впоследствии или, может быть, лучше, заранее . Дефис - уже является допустимым символом в URL.

String encodedURL = URLEncoder.encode(url.replace(" ", "-"), "UTF-8");
1 голос
/ 18 февраля 2010

Этот сайт не «кодирует свои URL» дефисами, он определяет их таким образом, во-первых, очевидно, что кодирование не требуется. Это зависит от того, как они генерируют свои URL. Вы можете сделать то же самое, но это не URLEncoding, это просто генерация URL. Использование URLEncoder для этой задачи, для которой она не предназначена, и жалоба на то, что она делает именно то, что должна, а не то, что вы хотите, довольно бессмысленно. Как сказал BalusC, URLEncoder является частью договора между вашим браузером и веб-серверами мира. Вы не можете это изменить.

1 голос
/ 18 февраля 2010

Согласна с @ BalusC.

Я также хотел бы отметить, что то, что вы пытаетесь сделать, на самом деле не является «кодированием» в обычном смысле фразы «кодировка URL». Кодирование подразумевает, что существует шаг обратного декодирования, который вернет вам исходный URL. Если у вас нет бизнес-правила, которое исключает символы «-» (например, дефисы, если вы создаете имена URL из «текста»), ваше преобразование не будет обратимым.

То, что вы делаете, - это преобразовывает строки URL в другие строки URL в соответствии с некоторым правилом, которое, вероятно, необратимо. Совсем не удивительно, что класс URLEncoder (который реализует определенную стандартизированную обратимую кодировку) не реализует ваше (специфичное для приложения) преобразование.

Как указывает @BalusC, правильный подход заключается в преобразовании строк URL (в соответствии с потребностями вашего приложения) до того, как вы их закодируете. Действительно, может быть лучше (например, безопаснее) реализовать преобразование для компонентов строки URL-адреса ... перед сборкой полного URL-адреса.

(И я считаю само собой разумеющимся, что URL-адреса используются в контексте, который фактически требует кодировки, реализованной URLEncoder.)

...