Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198140
  • 博文数量: 99
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1045
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-15 14:24
文章分类
文章存档

2015年(9)

2014年(90)

我的朋友

分类: PHP

2014-08-12 16:58:56

在前端开发中,为了让中文在不同的环境下都能很好的显示,一般是将中文转化为unicode格式,即\u4f60,比如:"你好啊"的unicode编码为"\u4f60\u597d\u554a"。
JS里将中文转为unicode编码很简单。
点击(此处)折叠或打开
  1. function convert2Unicode(str) {
  2.     return str.replace(/[\u0080-\uffff]/g,
  3.     function($0) {
  4.         var tmp = $0.charCodeAt(0).toString(16);
  5.         return "\u" + new Array(5 - tmp.length).join('0') + tmp;
  6.     });
  7. }
反转也很简单,直接alert出来或者innerHTML到dom节点里都可以。
但如果将\u4f60\u597d\u554a"字符传递给php,php就不能直接echo或者其他操作了。直接echo的话还是原生的字符,不能自动转化为中文。
php将unicode转为utf-8方法
在php5.0及以上版本中提供了json_encode, json_decode方法。在使用json_encode变量的时候,如果变量里含有中文的话,会将中文转为unicode格式。所以在想是否可以通过 json_decode将unicode转为中文呢?实际测试发现是可以的,但对单一的字符串发现有些问题。
对于简单的字符串,发现有时候使用json_decode转的化,结果直接为空了。但将字符串替换为数组然后在转就可以了。下面为封装的代码:

点击(此处)折叠或打开

  1. <?php
  2. function unicode2utf8($str){
  3.         if(!$str) return $str;
  4.         $decode = json_decode($str);
  5.         if($decode) return $decode;
  6.         $str = '["' . $str . '"]';
  7.         $decode = json_decode($str);
  8.         if(count($decode) == 1){
  9.                 return $decode[0];
  10.         }
  11.         return $str;
  12. }
使用这个方法可以很好的将unicode编码转为utf-8编码。
附上js转为实体字符和php将实体字符转为汉字的方法
js将汉字转为实体字符:

点击(此处)折叠或打开

  1. <?php
  2. function convert2Entity(str) {
  3.     var len = str.length;
  4.     var re = [];
  5.     for (var i = 0; i < len; i++) {
  6.         var code = str.charCodeAt(i);
  7.         if (code > 256) {
  8.             re.push('&#' + code + ';');
  9.         } else {
  10.             re.push(str.charAt(i));
  11.         }
  12.     }
  13.     return re.join('');
  14. }

  15. php将实体字符转为utf-8汉字的方法:

  16.  <?php
  17. function entity2utf8onechar($unicode_c){
  18.     $unicode_c_val = intval($unicode_c);
  19.     $f=0x80; // 10000000
  20.     $str = "";
  21.     // U-00000000 - U-0000007F: 0xxxxxxx
  22.     if($unicode_c_val <= 0x7F){
  23.         $str = chr($unicode_c_val);
  24.     }
  25.     //U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
  26.     else if($unicode_c_val >= 0x80 && $unicode_c_val <= 0x7FF){
  27.         $h=0xC0; // 11000000
  28.         $c1 = $unicode_c_val >> 6 | $h;
  29.         $c2 = ($unicode_c_val & 0x3F) | $f;
  30.         $str = chr($c1).chr($c2);
  31.     }
  32.     //U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
  33.     else if($unicode_c_val >= 0x800 && $unicode_c_val <= 0xFFFF){
  34.         $h=0xE0; // 11100000
  35.         $c1 = $unicode_c_val >> 12 | $h;
  36.         $c2 = (($unicode_c_val & 0xFC0) >> 6) | $f;
  37.         $c3 = ($unicode_c_val & 0x3F) | $f;
  38.         $str=chr($c1).chr($c2).chr($c3);
  39.     }
  40.     //U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  41.     else if($unicode_c_val >= 0x10000 && $unicode_c_val <= 0x1FFFFF){
  42.         $h=0xF0; // 11110000
  43.         $c1 = $unicode_c_val >> 18 | $h;
  44.         $c2 = (($unicode_c_val & 0x3F000) >>12) | $f;
  45.         $c3 = (($unicode_c_val & 0xFC0) >>6) | $f;
  46.         $c4 = ($unicode_c_val & 0x3F) | $f;
  47.         $str = chr($c1).chr($c2).chr($c3).chr($c4);
  48.     }
  49.     //U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
  50.     else if($unicode_c_val >= 0x200000 && $unicode_c_val <= 0x3FFFFFF){
  51.         $h=0xF8; // 11111000
  52.         $c1 = $unicode_c_val >> 24 | $h;
  53.         $c2 = (($unicode_c_val & 0xFC0000)>>18) | $f;
  54.         $c3 = (($unicode_c_val & 0x3F000) >>12) | $f;
  55.         $c4 = (($unicode_c_val & 0xFC0) >>6) | $f;
  56.         $c5 = ($unicode_c_val & 0x3F) | $f;
  57.         $str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5);
  58.     }
  59.     //U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
  60.     else if($unicode_c_val >= 0x4000000 && $unicode_c_val <= 0x7FFFFFFF){
  61.         $h=0xFC; // 11111100
  62.         $c1 = $unicode_c_val >> 30 | $h;
  63.         $c2 = (($unicode_c_val & 0x3F000000)>>24) | $f;
  64.         $c3 = (($unicode_c_val & 0xFC0000)>>18) | $f;
  65.         $c4 = (($unicode_c_val & 0x3F000) >>12) | $f;
  66.         $c5 = (($unicode_c_val & 0xFC0) >>6) | $f;
  67.         $c6 = ($unicode_c_val & 0x3F) | $f;
  68.         $str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5).chr($c6);
  69.     }
  70.     return $str;
  71. }
  72. function entities2utf8($unicode_c){
  73.     $unicode_c = preg_replace("/\&\#([\da-f]{5})\;/es", "entity2utf8onechar('\\1')", $unicode_c);
  74.     return $unicode_c;
  75. }


阅读(483) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~