·您当前的位置:主页 > 技术教程 > JavaScript >

[JS]JS提交中文encodeURI两次转码

时间:2014-06-06 15:32酷播
[JS]JS提交中文encodeURI两次转码

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

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

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

 1.

JS: escape :

  • js使用数据时可以使用escape
  • 例如:搜藏中history纪录。
  • 0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

 

 2.

JS: encodeURI :

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

 

 3.

JS: encodeURIComponent :

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

 

前段时间写JSP,使用AJAX以POST方式提交数据,如果是中文字符提交就会乱码,后来写ASP时用到AJAX以POST方式提交数据,中文一样是乱 码。搜索一下相关资料,问题应该是提交数据时是以UTF-8编码提交,所以接收时如果使用GB2312或者其它中文编码的话就会乱码。

使用GET方式提交数据的时候,中文问题很好解决,setRequestHeader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用 POST方式来提交数据。

对于使用POST,JSP的解决方法如下
使用escape(或encodeURI,两个函数都是JavaScript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这个是关键。

初始页面内容如下(hello.jsp):
  1. <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> 
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
  3. <html> 
  4. <head> 
  5. <title>AJAX提交页面</title> 
  6. <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
  7. <script type="text/javascript"> 
  8. function justdo(){ 
  9.     var post = "name=王力猛&email=wallimn@sohu.com&bokee=http://wallimn.bokee.com"
  10.     post = encodeURI(post); 
  11.     post = encodeURI(post);    //两次,很关键 
  12.     var xmlObj = new ActiveXObject("Msxml2.XMLHTTP"); 
  13.     var URL = "act.jsp";    //文件名需要调整成测试时的相应位置 
  14.     xmlObj.open("POST",URL,true); 
  15.     xmlObj.setRequestHeader("Cache-Control","no-cache"); 
  16.     xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); 
  17.     xmlObj.send(post);    //注意:POST方式,使用这个来发送内容 
  18. </script> 
  19. </head>  
  20. <body> 
  21. <input type="button" value="提交" onclick="justdo()" /> 
  22. </body> 
  23. </html> 
encodeURI() 函数可把字符串作为 URI 进行编码,字符将被十六进制的转义序列进行替换。
decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。
js的encodeURI()后的字符一般为utf-8编码,如果服务器端编码为不同编码,则需要iconv转换。
  1. <?php 
  2. $a = urlencode(iconv("gb2312", "UTF-8", "电影")); //等同于javascript encodeURI("电影"); 
  3. echo $a; 
  4. $b = iconv("utf-8","gb2312",urldecode("%E7%94%B5%E5%BD%B1")); //等同于javascript decodeURI("%E7%94%B5%E5%BD%B1"); 
  5. echo $b; 
  6. ?>   

热门文章推荐

请稍候...