Как закодировать URL со специальным символом «процент»? - PullRequest
1 голос
/ 03 января 2012

Я пытаюсь использовать метод encodeURL в jsp для кодирования URL-адреса с символом «%».

response.encodeURL(/page1/page2/view.jsp?name=Population of 91% in this place)

При каждом нажатии кнопки "The website cannot display the page"ошибка отображается.

Но если вы вручную измените символ "%" на "%25", например, "Population of 91%25 in this place", тогда отобразится правильная страница.

Также всякий раз, когда помещается символ "%"наконец, как это "In this place Population of 91%", тогда страница отображается правильно, но я заметил, что в адресной строке она по-прежнему отображается как "%", а не как "%25" и все еще работает.

Когда яобыскали, упоминалось только использование других методов, таких как encodeURI() & encodeURIComponent().

Можете ли вы предложить мне решение, в то же время используя метод encodeURL для правильного отображения страниц, даже если есть символ "%".Должен ли я использовать replace() или почему метод encodeURL() не работает правильно?

Ответы [ 4 ]

1 голос
/ 03 января 2012

Метод HttpServletResponse#encodeURL() на самом деле вводит в заблуждение.Прочитайте javadoc , чтобы узнать, что он на самом деле делает (добавляя jsessionid при необходимости).См. Также В контексте сервлета Java, в чем разница между перезаписью и пересылкой URL-адресов? , чтобы узнать о неоднозначностях в мире JSP / сервлетов.

В области сервлетов вам потребуется URLEncoder#encode() вместо:

String url = "/page1/page2/view.jsp?name=" + URLEncoder.encode("Population of 91% in this place", "UTF-8");
// ...

Однако на стороне JSP вместо этого вам потребуется тег JSTL <c:url> ( избегайте кода Java в JSP! ):

<%@ page pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...

<c:url var="url" value="/page1/page2/view.jsp">
  <c:param name="name" value="Population of 91% in this place" />
</c:url>

<a href="${url}">link</a>

<form action="${url}">
  <input type="submit" value="button" />
</form>
1 голос
/ 03 января 2012

Результат вашего кода:

%2Fpage1%2Fpage2%2Fview.jsp%3Fname%3DPopulation%20of%2091%25%20in%20this%20place

Вы должны кодировать только значение строки запроса.

... = "/page1/page2/view.jsp?name=" + URLEncoder.encode('Population of 91% in this place');

1 голос
/ 03 января 2012

Рассмотрите возможность использования URLEncoder и URLDecoder .

0 голосов
/ 27 марта 2013

В вашем примере вы можете использовать теги c:url и c:param:

<c:url value="/page1/page2/view.jsp">
    <c:param name="name" value="Population of 91% in this place" />
</c:url>

В частности, тег c:param будет URL-кодировать атрибут значения. Я просто столкнулся с ситуацией, когда мне нужно было сгенерировать URL со строкой запроса, содержащей значение, начинающееся со знака фунта. Без url-кодирования знак фунта был интерпретирован браузером как начало части привязки. Я добавил тег c:param, и знак фунта был закодирован, что позволяет ожидать поведение при переходе по ссылке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...