读书人

js 三种编码格式及差异

发布时间: 2012-09-05 15:19:35 作者: rapoo

js 三种编码格式及区别

js 三种编码格式及区别:

?

js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent1、   传递参数时需要使用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[Huoho.Com编辑] 例如:搜藏中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-ZencodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-ZencodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-ZAJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数function uniencode(text) {     text = escape(text.toString()).replace(/\+/g, "%2B");     var matches = text.match(/(%([0-9A-F]{2}))/gi);     if (matches)     {         for (var matchid = 0; matchid < matches.length; matchid++)         {             var code = matches[matchid].substring(1,3);             if (parseInt(code, 16) >= 128)             {                 text = text.replace(matches[matchid], '%u00' + code);             }         }     }     text = text.replace('%25', '%u0025');       return text; }当然服务器端要对编码过的字符串进行第二次转码.把字符串转换成UTF-8编码.function convert_int_to_utf8($intval) {     $intval = intval($intval);     switch ($intval)     {         // 1 byte, 7 bits         case 0:             return chr(0);         case ($intval & 0x7F):             return chr($intval);         // 2 bytes, 11 bits         case ($intval & 0x7FF):             return chr(0xC0 | (($intval >> 6) & 0x1F)) .                 chr(0x80 | ($intval & 0x3F));           // 3 bytes, 16 bits         case ($intval & 0xFFFF):             return chr(0xE0 | (($intval >> 12) & 0x0F)) .                 chr(0x80 | (($intval >> 6) & 0x3F)) .                 chr (0x80 | ($intval & 0x3F));           // 4 bytes, 21 bits         case ($intval & 0x1FFFFF):             return chr(0xF0 | ($intval >> 18)) .                 chr(0x80 | (($intval >> 12) & 0x3F)) .                 chr(0x80 | (($intval >> 6) & 0x3F)) .                 chr(0x80 | ($intval & 0x3F));     } } 这样中文字符串就可以转换成UTF-8编码.这种方法适合各种服务器环境..

?

读书人网 >JavaScript

热点推荐