[JS]JS提交中文encodeURI两次转码
[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):
使用GET方式提交数据的时候,中文问题很好解决,setRequestHeader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用 POST方式来提交数据。
对于使用POST,JSP的解决方法如下:
使用escape(或encodeURI,两个函数都是JavaScript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这个是关键。
初始页面内容如下(hello.jsp):
- <%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>AJAX提交页面</title>
- <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
- <script type="text/javascript">
- function justdo(){
- var post = "name=王力猛&email=wallimn@sohu.com&bokee=http://wallimn.bokee.com";
- post = encodeURI(post);
- post = encodeURI(post); //两次,很关键
- var xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
- var URL = "act.jsp"; //文件名需要调整成测试时的相应位置
- xmlObj.open("POST",URL,true);
- xmlObj.setRequestHeader("Cache-Control","no-cache");
- xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
- xmlObj.send(post); //注意:POST方式,使用这个来发送内容
- }
- </script>
- </head>
- <body>
- <input type="button" value="提交" onclick="justdo()" />
- </body>
- </html>
encodeURI() 函数可把字符串作为 URI 进行编码,字符将被十六进制的转义序列进行替换。
decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。
decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。
js的encodeURI()后的字符一般为utf-8编码,如果服务器端编码为不同编码,则需要iconv转换。
- <?php
- $a = urlencode(iconv("gb2312", "UTF-8", "电影")); //等同于javascript encodeURI("电影");
- echo $a;
- $b = iconv("utf-8","gb2312",urldecode("%E7%94%B5%E5%BD%B1")); //等同于javascript decodeURI("%E7%94%B5%E5%BD%B1");
- echo $b;
- ?>
热门文章推荐
- [JS]window.location获取url各项参数详解
- [JS]jQuery,javascript获得网页的高度和宽度
- [JS]视频弹窗视频弹出层videoLightBox(含三种播放器的用法)
- [JS]JS提交中文encodeURI两次转码
- [JS]js版方面encodeURI转码和decodeURI解码的用法实例
- [JS]js取当前机子的时间戳实例
- [JS]AES加密(基于crypto-js)PHP后端解密
- [JS]data:image/png;base64写法的用途及说明
请稍候...