手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2012年10月26日的文章

Unicode转换

其实只是一段很少的代码。

http://www.kalvin.cn/article/php-encrypt-decrypt-unicode-string-functions-and-escape/
  1. <?php    
  2. function uni_decode($s) {    
  3.     preg_match_all('/\&\#([0-9]{2,5})\;/'$s$html_uni);    
  4.     preg_match_all('/[\\\%]u([0-9a-f]{4})/ie'$s$js_uni);    
  5.     $source = array_merge($html_uni[0], $js_uni[0]);    
  6.     $js = array();    
  7.     for($i=0;$i<count($js_uni[1]);$i++) {    
  8.         $js[] = hexdec($js_uni[1][$i]);    
  9.     }    
  10.     $utf8 = array_merge($html_uni[1], $js);    
  11.     $code = $s;    
  12.     for($j=0;$j<count($utf8);$j++) {    
  13.         $code = str_replace($source[$j], unicode2utf8($utf8[$j]), $code);    
  14.     }    
  15.     return $code;//$s;//preg_replace('/\\\u([0-9a-f]{4})/ie', "chr(hexdec('\\1'))",  $s);    
  16. }    
  17.    
  18. function unicode2utf8($c) {    
  19.     $str="";    
  20.     if ($c < 0x80) {    
  21.          $str.=chr($c);    
  22.     } else if ($c < 0x800) {    
  23.          $str.=chr(0xc0 | $c>>6);    
  24.          $str.=chr(0x80 | $c & 0x3f);    
  25.     } else if ($c < 0x10000) {    
  26.          $str.=chr(0xe0 | $c>>12);    
  27.          $str.=chr(0x80 | $c>>6 & 0x3f);    
  28.          $str.=chr(0x80 | $c & 0x3f);    
  29.     } else if ($c < 0x200000) {    
  30.          $str.=chr(0xf0 | $c>>18);    
  31.          $str.=chr(0x80 | $c>>12 & 0x3f);    
  32.          $str.=chr(0x80 | $c>>6 & 0x3f);    
  33.          $str.=chr(0x80 | $c & 0x3f);    
  34.     }    
  35.     return $str;    
  36. }    
  37.    
  38. $str='%u5927%u5BB6%u597D%uFF0C我是孤魂!<br />\u8FD9\u662F\u6D4B\u8BD5\u6587\u672C\uFF01';    
  39. echo uni_decode($str); // 大家好,我是孤魂!这是测试文本!    
  40. ?>  

这段代码以前也写过,而且,其实用的地方挺多,比如json的字符串(有些只是json处理了一下,但并不能完全转换,总不能强制变成json格式再转换吧?)
其实黑的很方便,而且这段代码在PHP手册中的注释里也出现过,但一下子找不到了,于是看到后就做了个备份罢了