URL传递中文解决方案

首先,弄清楚为什么url传递中文会转码或者乱码,以及http头

contentType="text/html; charset=GBK"

的作用。

html代码会经过web服务器,浏览器处理,所以造成转码或者乱码的原因,可能涉及到:页面本身的设置、web服务器的设置、浏览器的设置。

 

在动态页面,比如jsp、php中,可以设置

contentType="text/html; charset=GBK"

在服务器,比如apache中可以在web.xml中设置

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="utf-8"/>

在Spring、Struts等插件中还可以配置页面过滤器。

在IE等浏览器中可以设置强制的url编码规则。

 

但是按照网络标准RFC-1738规定,一般的浏览器都是以utf-8或者gbk等方式来编码url的。

 

解决乱码要从根源入手,根源是什么?刚才我说了,处理html的顺序是:页面本身的设置、web服务器的设置、浏览器的设置。那么最有效的方式就是照顾到浏览器。

 

在web.xml或者Spring、Struts等中我们都不用管,因为他们是间接的方式,不一定其作用。

 

怎么照顾到浏览器?就是将url的编码规则自己指定。接收的时候自己解码。

 

制定url编码规则很简单,就是将url先用utf-8编码,编码结果是英文、数字、百分号等符合网络标准RFC-1738的格式。

 

编码的方法可以在服务器端的程序中进行,但那样效率太低。javascript已经做好了这方面的工作,只需要调用encodeURI()或者encodeURIComponent()函数即可。

 

要在href、src等处调用javascript的函数,方法如下:

一、在HTML里可以通过"javascript:"方式调用JavaScript的函数或方法,如下所示:
<html>
 <head>
  <title>使用“javascript:”</title>
 </head>
 <body>
  <a href="javascript:alert('您点击了这个超链接')">请点我</a>  
 </body>
</html>

二、  "javascript:"不但可以调用JavaScript的方法,也可以调用用户自定义的函数,如下代码所示:
<html>
 <head>
  <title>使用“javascript:”</title>
  <script language="javascript" type="text/javascript">
   <!--
    function OnclickLink()
    {
     alert("您点击了这个按钮");
    }
   -->
  </script>
 </head>
 <body>
  <a href="javascript:OnclickLink()">请点我</a>
 </body>
</html>

三、与事件结合
<html>
 <head>
  <title>与事件相结合</title>
  <script language="javascript" type="text/javascript">
   <!--
    function OnMouseOverLink()
    {
     alert("您的鼠标从第一个超链接上划过");
    }
   -->
  </script>
 </head>
 <body>
  <a href="#" οnmοuseοver="OnMouseOverLink()">请将鼠标放在上面</a><br>
  <a href="#" οnclick="javascript:alert('您点击了第二个超链接')">请点我</a>  
 </body>
</html>

 

传递中文URL的解决方案如下:

<a href="javascript:location=encodeURI('/zollty/search.jsp?form_project=金海湾');">金海湾</a>

点击超链接时实际上要激发javascript函数才其作用,我们不能写成如下形式:

<a href='encodeURI("/zollty/search.jsp?form_project=金海湾")'>金海湾</a>

因为上面的写法在未点击超链接时,href的值就是包含javascript代码的原原本本的字符串,点击后才执行encodeURI()函数,而超链接会以url为“encodeURI("/zollty/search.jsp?form_project=金海湾”来跳转,显然是找不到这个页面的。

 

最好是写成如下形式:

<a href="javascript:void(0)" οnclick="location.href=encodeURI('/zollty/search.jsp?form_project=金海湾');">金海湾</a>

其含义更加明了。

 

另外就是表单中提交中文的问题,通过设置页面的

contentType="text/html; charset=GBK"

就可以解决。

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当使用URL传递时间时,由于空格和冒号被解析成%导致回显出问题,可以采取以下解决方案: 1. 使用URL编码:可以使用URL编码来替换空格和冒号,将其转换为特殊字符。例如,空格可以用"%20"表示,冒号可以用"%3A"表示。这样,在接收方解析URL时,可以正确还原时间。 2. 使用Base64编码:将时间先进行Base64编码,在URL传递时,可以避免特殊字符被解析成%的问题。而在接收方,需要对Base64编码的时间进行解码还原。 3. 使用其他字符替换:如果不想使用URL编码或Base64编码,可以考虑使用其他字符来替换空格和冒号。例如,可以将空格替换成下划线("_"),冒号替换成横线("-")。这样,在接收方解析URL时,需要进行相应的字符替换操作。 需要注意的是,在传递时间时,要确保发送方和接收方使用相同的编码方式或字符替换方式,以确保传递的时间能够正确还原。同时,在接收方对URL进行解析时,还需要对传递的时间进行相应的解码操作,以获取正确的时间值。 ### 回答2: 在URL传递时间时,空格被解析为"%20",冒号被解析为"%3A"。为了解决这个问题,需要对时间进行URL编码和解码操作。 当传递时间参数时,可以使用编码函数来对时间进行URL编码,例如在JavaScript中可以使用encodeURIComponent()函数。该函数将空格编码为"%20",冒号编码为"%3A"。在服务器端接收到参数时,需要使用相应的解码函数进行解码,例如在PHP中可以使用urldecode()函数。 具体的操作步骤如下: 1. 在发送请求时,使用encodeURIComponent()对时间参数进行编码,例如将空格编码为"%20",冒号编码为"%3A"。 2. 服务器端接收到参数后,使用对应的解码函数,例如urldecode()进行解码,将编码后的时间参数还原为原始格式。 3. 在服务器端处理和显示时间参数时,根据需要进行格式化操作,例如使用日期时间函数将参数转换为特定的时间格式。 通过以上步骤,可以确保时间参数在URL传递过程中不会被解析成"%20"和"%3A",从而解决回显出问题的情况。请注意,URL编码和解码操作适用于其他需要在URL传递的特殊字符,以确保数据的正确性和完整性。 ### 回答3: 在通过URL传递时间时,由于空格和冒号在URL中被解析成特殊字符,可能会导致回显出问题。解决这个问题的方式有以下两种: 1. URL编码和解码:可以使用URL编码和解码来处理特殊字符。对于空格和冒号,可以分别将它们编码为"%20"和"%3A",在接收端进行解码后再使用。例如,如果要传递时间"2022-01-01 12:00:00",可以将它编码为"2022-01-01%2012%3A00%3A00"。在接收端,将接收到的字符串进行解码还原成原始的时间格式。 2. 使用其他分隔符:为了避免特殊字符在URL上引发混淆,可以使用其他分隔符替代空格和冒号。例如,可以将空格替换为下划线"_", 将冒号替换为短横线"-"。这样传递时间"2022-01-01 12:00:00"时,可以将它转换为"2022-01-01_12-00-00"。在接收端,将接收到的字符串使用相应的分隔符还原成原始的时间格式。 总结起来,通过URL传递时间时,可以使用URL编码和解码来处理特殊字符,或者使用其他分隔符替代空格和冒号来避免解析问题。根据具体需求和实际情况选择适合的方法来传递和解析时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值