【问题标题】:Problems with passing Euro Sign as URL parameter将欧元符号作为 URL 参数传递的问题
【发布时间】:2014-03-26 11:04:04
【问题描述】:

我正在尝试将欧元 ( € ) 符号作为我的 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中

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

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

【问题讨论】:

  • 你在用tomcat吗?

标签: javascript spring character-encoding url-encoding


【解决方案1】:

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

您需要做的是打开您的 Tomcat servlet.xml 文件并找到 HTTP 连接器并添加带有值 trueuseBodyEncodingForURI 属性。

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

那么,你需要注册一个CharacterEncodingFilter来设置HttpServletRequest字符编码。

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

【讨论】:

    【解决方案2】:

    您确实需要使用UTF-8 对应该给出%E2%82%AC 的€ 符号进行编码。您需要注意两端使用的编码。

    客户端上的 URLEncoder.encode(url, "UTF-8") 之类的就可以了。

    如果您使用的是 Spring,org.springframework.web.util.UriUtils 也有不错的实用程序可供您使用。

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

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

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

    【讨论】:

    • 问题是在服务器端解码。
    【解决方案3】:

    查看以下答案

    我认为 org.springframework.web.filter.CharacterEncodingFilter 在这里应该有所帮助。 尝试使用和不使用您的 encodeURI(params)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 2015-10-13
      相关资源
      最近更新 更多