在js中对中文和特殊字符转码
最近在公司需要写一个管理系统,奈何php实在太差,所以无奈中使用ajax模型,没有用公司的js库,选择了jquery。
结果在一个search cgi中在链接中会使用中文,所以研究了半天。
先贴一下js中关于转码的一点知识:
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编码结果相同。
最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
在管理系统的代码如下:
function GetMedia()
{
var req=SplitGetRequest();
var appid=req['appid'];
var type_t=req['type'];
var medianame=req['medianame'];
jQuery.ajax({
//由于中文的原因
url:encodeURI("/cgi-bin/mman_media_get.cgi?appid="+appid+"&type="+type_t+"&medianame="+medianame),
dataType:"json",
data:"",
type:"get",
success:function(data,type){
ret = data.ret;
if (ret != 0){
return;
}
if(data.medianame != medianame) {
alert("Error:medianame is error");
}
jQuery("#appid").val(appid);
GetTypeList();
jQuery("#type").val(type_t);
},
error:function(xhr)
{
alert("Error:"+xhr.status);
}
});
}
由于medianame是中文,所以URL直接用
"/cgi-bin/mman_media_get.cgi?appid="+appid+"&type="+type_t+"&medianame="+medianame
会出现问题,因此使用了encodeURI.
对于medianame = 空的.txt,真实的发包就是
http://mman.qq.com/cgi-bin/mman_media_get.cgi?appid=353&type=13&medianame=%E7%A9%BA%E7%9A%84.txt
OK,就这样~
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Dante 来源: Vimer
- 标签: 转码
- 发布时间:2010-03-08 23:06:43
- [69] Twitter/微博客的学习摘要
- [65] find命令的一点注意事项
- [64] IOS安全–浅谈关于IOS加固的几种方法
- [62] Go Reflect 性能
- [62] android 开发入门
- [61] 如何拿下简短的域名
- [61] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [58] 图书馆的世界纪录
- [58] 读书笔记-壹百度:百度十年千倍的29条法则