将Euro Sign作为URL参数传递的问题

时间:2014-03-26 11:04:04

标签: javascript spring character-encoding url-encoding

我试图在我的spring jsp中将欧元(€)符号作为url参数传递。这样做的正确方法是什么?我尝试了以下但无济于事。问题是字符被正确编码但未从我的目标jsp解码。

我正在使用

<%@page contentType="text/html;charset=UTF-8" %>

这是调用jsp:

<script> ... // params contains the euro sign document.location='dest.jsp?p='+escape(params);

在dest.jsp

<input type="hidden" id="par" value="${param.p}"> 并在同一页面的脚本中 console.log($('#par').val())

  • 当我使用escape(params)时,我将url作为%u20AC。但是dest.jsp
  • 中没有(空)值
  • 当我使用encodeURI(params)或encodeURIComponent时,我得到url为€。但是dest.jsp中的值为⬠- 我不能用它来呈现为欧元符号

3 个答案:

答案 0 :(得分:1)

您确实需要使用%E2%82%AC编码应使UTF-8 {@ 1}}的符号。您需要注意两端使用的编码。

客户端上的URLEncoder.encode(url, "UTF-8")之类的东西会这样做。

如果您使用的是Spring,org.springframework.web.util.UriUtils也有很好的实用工具可以使用。

如果解码问题在服务器上,则首先需要确保您的Web容器使用正确的编码对URI进行解码。

Tomcat默认使用ISO-8859-1解码URI,因此您需要更新连接器配置

<Connector port="8080" ... 
           URIEncoding="UTF-8"/>

答案 1 :(得分:1)

我将假设您正在使用Tomcat,因为这是我测试过的,我们得到了相同的结果。

您要做的是打开Tomcat servlet.xml文件并找到HTTP连接器,并添加值为true的{​​{3}}属性。

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"
    redirectPort="8443" useBodyEncodingForURI="true">
</Connector>

然后,您需要注册CharacterEncodingFilter来设置HttpServletRequest字符编码。

您可以在我的答案中阅读有关此行为的更多信息:

答案 2 :(得分:0)

请参阅以下答案

我认为org.springframework.web.filter.CharacterEncodingFilter应该在这里提供帮助。 尝试使用和不使用encodeURI(参数)