编码那些事

标签: 编码 | 发表时间:2010-09-28 14:13 | 作者:jayli winners
出处:http://www.uedmagazine.com/ued/index.php
前端开发中编码的问题一向是让人头疼的,尤其是在以gbk为基础页面编码的淘宝,情况更加复杂,除了常见的页面文件的编码之外,对不同编码js/css文件的引用、meta的charset设置、表单提交的URL编码等问题的处理稍微粗心就会出问题,特别是ajax中的编码转换,始终缺乏统一方便的解决方案,今天我们就分享两个js转码的常见案例的解决。首先,我们应当了解编码相关的一些基本概念:

1,gbk和utf-8是不兼容的两种编码,unicode是万国码码表的简称
2,utf-8编码是unicode的一种实现
3,js引擎的内码是unicode
4,URL编码是将字符裸码以16进制显示出来,每个字之前冠以“%”
5,因此,URL编码的结果只唯一和字符当前存储的裸码有关,原则上转换过程不查任何码表
6,unicode码表中,中文字符的范围为4E00到9FA5
7,js所识别的unicode表示形式为“\uXXYY”
8,js中的encodeURI是对字符串进行URL编码,编码基于utf-8的裸码
9,js中的escape是对字符串进行unicode转码,转码基于unicode码表
10,form表单提交会对参数进行URL编码,编码所基于的裸码类型和页面编码有关

基于以上知识点,可以初步得出:

1,js无法直接进行基于gbk裸码的url编码
2,js无法直接进行转换为'\uXXYY'形式的unicode编码

而在ajax过程中,通过js传参经常会遇到需要gbk url编码和直接传输unicode编码的情况,尤其当通过json传数据的时候。在php中,对一个对象进行json_encode转换的时候,会自动将中文转换为unicode,这里的unicode可以直接被js识别,因此在js中是只要将json串转换为对象即可,不用解码,php代码为:
$a = array('a'=>11,'b'=>'淘宝');//json
echo json_encode($a);//输出 {"a":11,"b":"\u6dd8\u5b9d"}
而php中进行url编码默认是以utf8的方式
//输出 %E6%B7%98%E5%AE%9D ,这里是utf8方式的URL编码
echo urlencode('淘宝');

如果想进行gbk方式的URL编码,则可以
$s = '淘宝';
$g = iconv('utf-8', 'gbk',$s);//utf8字符串转换为gbk字符串
echo urlencode($g);//输出 %CC%D4%B1%A6 ,这里是gbk方式的URL编码

php中对URL编码的解码是上面的逆操作
//gbk URL解码:输出 淘宝
echo urldecode('%CC%D4%B1%A6');
//utf8 URL解码:输出 淘宝
echo iconv('utf-8','gbk',urldecode('%E6%B7%98%E5%AE%9D'));

这里,我们用模拟表单提交的方法来实现js中的gbk URL编码,因为,gbk编码的页面的form表单提交的URL编码是和页面编码一致的,我们模拟表单提交给一个隐藏的iframe,然后取得iframe的src中的提交结果,就得到了gbk URL编码

gbk URL编码的demo

而如果要在js中模拟php中的json_encode只对中文进行unicode编码,则需要遍历字符串,用escape作转换,然后替换没用的字符
//js中只对中文进行unicode编码
var foo = function(s){
return s.replace(/[\u4E00-\u9FA5]/ig,function(w){
return escape(w).toLowerCase().replace(/%/ig,'\\');
});
};

若对所有字符进行unicode编码,则直接escape就可以了

js unicode编码的demo

相关 [编码] 推荐:

编码

- - 人月神话的BLOG
前面谈需求,架构和设计都比较多,今天谈一下编码方面的内容,做一个好的程序员不容易,很多时候不是体现在需求和架构能力的缺少上面,更多的是体现在最基础的编码和实现能力的不足上面. 编码是一个技术活,需要大量的脑力活动,但是很多人确可以把编码做为一个体力活,我在这里想继续强调的是如果编码是一个完全的重复体力劳动的话,那么所有工作就一定是可以自动化掉的,在这个时候你原来所有的工作没有任何的价值体现而被完全替代.

字符编码

- - 博客 - 伯乐在线
伯乐在线注:本文来自文章作者 @acmerfight 的投稿( 原文链接). 如果其他朋友也想投稿,请发邮件至 [email protected],或直接给 @伯乐在线官方微博 私信投递. 你是否认为“ASCII码 = 一个字符就是8比特”. 你是否认为一个字节就是一个字符,一个字符就是8比特.

将URL编码?

- - JavaScript - Web前端 - ITeye博客
    URL一般只能由字母、数字、$ - _. * ' ( ) 等一些字符构成. 那么当URL中需要用到汉字时怎么办,譬如有这样的URL: "www.test.com/search?name=张三",此时,只有通过将URL进行编码的方式进行传递了.     Javascript编/解码方法:.     如果对上面的URL(www.test.com/search?name=张三)进行编码的话.

编码风格不是编码规范

- - 外刊IT评论
我并不认为程序员是一个情绪特别丰富的群体. 但有一些事情却能很容易刺激程序员的神经,那就是代码格式和布局. 如果看到一个函数的括弧在同一行上没有闭合,我的眼睛会喷血. 如果看到有人没有 恰好的在两个函数间留一空行,我的小腿会抽筋. 但重点在这里——除非是在家里开发自己的业余爱好软件,我的这些个人喜好其实是无关紧要的.

理清URL编码

- winners - Thinking for Fun
关于URL编码,RFC1738做了如下的规定:. “Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*’(),” [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”.

编码那些事

- winners - UEDMAGAZINE
前端开发中编码的问题一向是让人头疼的,尤其是在以gbk为基础页面编码的淘宝,情况更加复杂,除了常见的页面文件的编码之外,对不同编码js/css文件的引用、meta的charset设置、表单提交的URL编码等问题的处理稍微粗心就会出问题,特别是ajax中的编码转换,始终缺乏统一方便的解决方案,今天我们就分享两个js转码的常见案例的解决.

java编码规范

- - ITeye博客
   总结前期做的几个项目,个人认为代码的规范对团队的协作有着密切的关系. 现将一些常用的约束总结如下,以便今后参阅:. 1、所有的类、属性、方法都遵守以字母和数字为主,尽量不要参与特殊符号如下划线. 其次,除类名开头字母大写外,其他名字都要小写,然后第二个后的单词首字母大写,长度在30个字符以内.

oracle 编码规范

- - 操作系统 - ITeye博客
军规一:【恰当控制事务大小,commit不要过于频繁. 】 军规二:【在OLTP系统中一定要注意使用绑定变量. 】 军规三:【在OLTP系统中一定要注意复杂的多表关联不宜超过4个,关联十分复杂时,需要拆分成多个步骤,防止执行计划不正确. 】 军规四:【合理收集统计信息,固定住SQL的执行计划. 】 军规五:【尽量避免使用XA事务,在RAC环境中要避免XA事务跨节点操作.

HTML编码规范

- - SegmentFault 最新的文章
这段时间在整理前端部分代码规范,初步想法是从HTML、CSS、Javascipt、项目文件目录四部分是整理. 之前已经整理完了 CSS编码规范,有兴趣可以了解下. [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符. 对于非 HTML 标签之间的缩进,比如 script 或 style 标签内容缩进,与 script 或 style 标签的缩进同级.