Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > sendRedirect() и URL с кириллцей.


Автор: Mortician 21.10.2011, 14:05
Уж простите меня если создал топик не в той ветке.
Возникла проблема, есть различные ЧПУ URLы вида /статьи/разные/название-статьи.html и нужно сделать редирект на эти URL. Подскажите пожалуйста, как правильно это сделать.
Естественно просто так это не выйдет:
Код

response.sendRedirect(“/статьи/разные/название-статьи.html”);
нужно преобразовать элементы пути в UTF-8, но так:
Код

response.sendRedirect(java.net.URLEncoder.encode(“/статьи/разные/название-статьи.html”,"UTF-8"));
делать нельзя потому что спец символы тоже будут закодированы и ничего хорошего не получится.
Видел в как некоторые товарищи предлагают делать так: 
Код

response.sendRedirect(java.net.URLEncoder.encode(“/статьи/разные/название-статьи.html”,"UTF-8").replace("%2F", "/"));
только выглядит это как-то по китайски (простите за не корректность).
Подскажите пожалуйста, как это более человечно сделать, или возможно есть готовые решения?

Автор: Nofate 21.10.2011, 14:17
Вполне себе решение товарищи советуют. Еще можно разбить исходный путь по символу "/", заэнкодить кусочки и склеить обратно.

Автор: Mortician 21.10.2011, 14:37
Nofate, 
Цитата

Вполне себе решение товарищи советуют. Еще можно разбить исходный путь по символу "/", заэнкодить кусочки и склеить обратно. 

Ну разбить, а потом склеивать сложнее, а результат тот же... Однаго в любом случае другие спец. символы тоже закодируются также - что ни есть хорошо.

Автор: Samotnik 22.10.2011, 12:48
Mortician, ь http://forum.ixbt.com/topic.cgi?id=26:40348-8 глянуть можешь ещё.

Автор: Mortician 22.10.2011, 13:02
Samotnik, да в общем уже читал эту ветку, наверное это единственное, что есть на русском по данной проблеме.
Только mike_teplitsky там посоветовал совсем не в тему. А dozen предложил не совсем работающий, устаревший аналог java.net.URLEncoder.encode и decode, такая вот печаль... Похоже sendRedirect не готов к интернационализации url, а правильное кодирование целого URL нужно делать вручную либо кодировать части по отдельности.
Дзякуй братка!

Автор: Samotnik 22.10.2011, 13:21
Mortician, там ещё советовали вызвать toASCIIString() тоже не помогает ?

Автор: Mortician 22.10.2011, 13:44
Samotnik, вот дела, я увидел groovy и даже не стал читать его пост... Моя вина.. 
Еще раз Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)