<a href>传参的中文乱码问题

版权声明:本文为博主半原创文章,未经博主允许不得不转载时允许转载 :)

当需要href进行传参,参数为中文时,会出现乱码问题,最简单的方法是:

传入的值首先用escape()进行加密,然后在取值页面用unescape()解密,亲测有效。

网上查了一下还有用urlencode进行加密,urldecode解密。

额...那这两者有啥区别呢,随手查阅整理了一下,来源(http://www.cnblogs.com/glory-jzx/archive/2013/06/14/3135580.html):

js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。                            
  例如:<script language="javascript">document.write(‘<a href="http://passport.baidu.com/?logout&aid=7&u= +encodeURIComponent("http://cang.baidu.com/bruce42")+">退出< /a>‘);</script>

2、 进行url跳转时可以整体使用encodeURI 
  例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3、 js使用数据时可以使用escape 
  例如:搜藏中history纪录。

4、 escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

5、 最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)

6、 不编码:

  escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

  encodeURI不编码字符有82个:!,#,$,&,‘,(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

  encodeURIComponent不编码字符有71个:!, ‘,(,),*,-,.,_,~,0-9,a-z,A-Z

【escape()  encodeURI() 区别?】

escape() 方法: 
  所有空格、标点符号、重音字符,以及任何其他非ASCII字符都编码改为"%XX"的形式,xx是16进制数字所代表. 
escape和unescape的编码和解码功能, escape返回16进制编码的一种ISO拉丁字符集. unescape的功能将具有特殊值的16进制编码转换为ASCII字符串 
举例: 
escape(‘[email protected]#$%^&*(){}[]=:/;?+\‘"‘): 
结果:%[email protected]%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22

encodeURI() 方法 
    Encodeuri方法返回一个编码后的URI. 因此,如果你将其结果用Decodeuri方法,原始的串会返回. Encodeuri的方法并不对以下字符编码:":"、"/"、"; "、"? ". 但可以使用 encodeuricomponent 的方法对这些字符进行encode. 
    encodes,一种 Uniform Resource Identifier (URI)(URI)逐一替换某些字符,描述为UTF-8编码的特点. 
    例如 : 
    encodeURI(‘[email protected]#$%^&*(){}[]=:/;?+\‘"‘): 
    结果:[email protected]#$%25%5E&*()%7B%7D%5B%5D=:/;?+‘%22

encodeURIComponent() 方法: 
encodeuricomponent 方法返回一个编码的URI. 因此,如果你将decodeuricomponent,原来的串会返回. 由于所有文字encodesencodeuricomponent方法都会进行编码,所以要小心,如果存在路径等串例如: "/FOLDER1/FOLDER2/DEFAULT.HTML". 加密后并不会,如果作为一个网络服务器的请求将会失效. 使用这种方法Encodeuri当字符串超过一个以上URI组成. 
例子:最简单的方法就是看它们加密这些字符后生成的代码. 
encodeURIComponent(‘[email protected]#$%^&*(){}[]=:/;?+\‘"‘): 
结果 !%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%3B%3F%2B‘%22

【什么时候适合用什么方法?】

escape() 方法不会加密 + 在服务器端会被解析为空格以及在表单forms区域中的spaces.基于这样的缩减方式,你应该尽可能的避免使用这种方法,二选一的话,最好的经常使用 encodeURIComponent().

escape() 不会加密: @*/+

使用encodeURI()  比 escape() 稍专业化,它是针对URIs编码的 .一个做为querystring的反面, 属于URL的一个部分.使用这种方法是当你需要将一个字符串转换为URIs资源标识以及需要某些字符保持非encode状态.请记住, 这个‘ 字符是不会进行编码的,因为它本身就包括在URIs里.

encodeURI()不会加密: [email protected]#$&*()=:/;?+‘

最后, encodeURIComponent() 方法用在大多数cases中,当你需要对一个单独URIs部件进行编码,这种方法可以加密某些特殊用于的URIs的字符,因此大部分部件可以包含在里面. 记住, ‘ 字符本身就包括在URIs里,所以不会此方法不会对其进行编码.

encodeURIComponent() 不会加密: !*()‘
http://shijian0306.javaeye.com/blog/241264

博主只用过escape,so起参考作用

下班咯~

时间: 2024-08-07 00:18:06

<a href>传参的中文乱码问题的相关文章

关于jsp之间href传参(中文)乱码问题

在A.jsp中有href传值 <a href=\"6.jsp?param="+rs.getString(2)+"\">" 在B.jsp中使用 <% request.setCharacterEncoding("utf-8");%> <%=request.getParameter("param")%> 获得值,运行调试发现是一堆乱码 起先我以为是jsp整体编码方式不对,所以进行了如下修

超链接传参(中文)乱码

超链接传参(中文)乱码 解决方法: 超链接提交数据,是以get方式提交的 加入 以下代码是无效的,它是用来解决post方式的乱码问题       request.setCharacterEncoding( "UTF-8" );       response.setCharacterEncoding( "UTF-8" ); 而解决get方式乱码,最方便的方法是在tomcat文件中的server.xml文件进行配置 配置 <Connector port= &quo

action之间传参为中文;type=&#39;redirect&#39;和 type=&#39;redirectAction&#39;主要区别

摘录自:http://blog.csdn.net/lhi705/article/details/7446156 [html] view plain copy print? Struts2中action之间传参中文乱码的问题 解决方法一(已经验证,可以): 两个action都定义要传的参数属性的get和set方法,必须相同! 在struts.xml中定义: <result name="input" type="redirect"> <param na

window.location.href传参中文乱码问题

window.location.href="${pageContext.request.contextPath}/story/exportStoryInfo?domainId="+domainIds                                                +"&requirementName="+requirementName; 前端页面需求名称输入"4.19活动",传递到后台时出现中文乱码问题: 解

Http请求传json数据中文乱码问题

业务场景:调easyui的dialog打开一个弹窗,传参是用json封装的,而且有中文,然后在极速模式是正常的,在ie11测试发现中文出现乱码了 var params = JSON.stringify(writParamList); top.dialog({ id: 'noticeList', title:'列表', width:900, height:500, url:'${root}/notice/multiNoticeList.do?params='+params, onclose:fun

[转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案

时间 2014-04-14 14:33:44  CSDN博客 原文  http://blog.csdn.net/xby1993/article/details/23677375 主题 ServletJSP JSP或servlet中中文乱码的解决方案: 1.以POST请求方式: 在获取请求参数之前设置: request.setCharacterEncoding("utf-8"); 设置输出编码: response.setContentType("text/html;charse

解决ASIHTTP setFile上传文件后中文乱码问题

这问题困扰我好长时间,不上传文件就不是乱码,传文件就乱码,并且Android好使;最后联合中间件后台/Android客户端/IOS客户端,共同上传比较,最后在后台捕捉时发现,Android的提交输出格式为: --PfyXAYcEcmd3GqueWEk6hXUWXfm-KrG4XNEQContent-Disposition: form-data; name="companyName"Content-Type: text/plain; charset=UTF-8Content-Transf

js下载文件;下载方式&lt;a&gt; 和href方式;已经中文乱码问题

一:先看看各种下载方式: 1. A 标签的方式 : <a target="_Blank" href="<%=basePath %>html/document/GJB/CYBDXZ/文件名.doc">文件名.doc</a> 2. href方式:   function go (name){                                             var url =  encodeURIComponent

Axure+WinSCP上传文件显示中文乱码

问题描述 用axure制作完原型后输出html文件,上传到阿里云服务器上供其他人浏览,通过winscp上传后,公网访问提示404. 环境 云服务器 Centos7.2 web服务器 nginx 问题原因 上传到服务器的文件为中文名称.html,所以显示乱码! 找原因遇到的各种坑 1. 第一时间感觉是nginx配置问题,查看nginx.conf 中 charset utf-8 已经设置: 2. 操作系统不是中文字符集,搜了一下,(这里网上写答案的朋友还是要自己试一试,不要都是照搬) 坑1,Cent