我试图在我的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())
â¬
- 我不能用它来呈现为欧元符号答案 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(参数)