PHP中Unicode编码问题的解决方法

网上找了好多解决方案,但都是什么mb_xxxx函数找不到或是不支持iconv。好像是PHP版本太低了。

好不容易找了一个不依赖于函数实现的版本,但是转换过来的汉字是UTF8编码的。

又找啊找,找了一晚上,把UTF8到GB2312的转换问题搞定了。

使用了一个chinese的类来查表转换的,也不依赖于PHP的版本。

 
php代码
  1. /*  
  2. * 用处 :此函数用来逆转javascript的escape函数编码后的字符。  
  3. * 关键的正则查找我不知道有没有问题.  
  4. * 参数:javascript编码过的字符串。  
  5. * 如:phpUnescape("%u5927")= 大  
  6. * 解码结果为UTF8的编码  
  7. */ 
  8. function phpUnescape($escstr){  
  9.     preg_match_all("/%u[0-9A-Za-z]{4}|%.{2}|[0-9a-zA-Z.+-_]+/",$escstr,$matches);   
  10.     $ar = &$matches[0];  
  11.     $c = "";  
  12.     foreach($ar as $val){  
  13.         if (substr($val,0,1)!="%") { //如果是字母数字+-_.的ascii码  
  14.             $c .=$val;  
  15.         }  
  16.         elseif (substr($val,1,1)!="u") { //如果是非字母数字+-_.的ascii码  
  17.             $x = hexdec(substr($val,1,2));  
  18.           $c .=chr($x);  
  19.         }  
  20.         else { //如果是大于0xFF的码  
  21.             $val = intval(substr($val,2),16);  
  22.           if($val < 0×7F){ // 0000-007F  
  23.             $c .= chr($val);  
  24.           }elseif($val < 0×800) { // 0080-0800  
  25.             $c .= chr(0xC0 | ($val / 64));  
  26.             $c .= chr(0×80 | ($val % 64));  
  27.           }else// 0800-FFFF  
  28.             $c .= chr(0xE0 | (($val / 64) / 64));  
  29.             $c .= chr(0×80 | (($val / 64) % 64));  
  30.             $c .= chr(0×80 | ($val % 64));  
  31.           }  
  32.         }  
  33.     }  
  34.     return $c;  
  35. }  
  36.  
  37. //UTF8 TO GB2312 下面这个类请自己到网上去搜  
  38. require_once("class.Chinese.php");//这是一个转换汉字编码的类  
  39. $cnvert = new Chinese("UTF8","GB2312",trim($tmp_str));  
  40. $actual_value=$cnvert->ConvertIT(); 
Tags: php
上一篇: 毕业典礼
下一篇: 悲欢离合

相关日志推荐
编程中的一些细节问题
[转载]apache和php乱码问题的解决方法
YII的layout居然无法共享controller通过push方式设置的变量
[转载]NuSOAP乱码问题的解决方法
AJAX与PHP传递中文数据

1 条留言

  1. 神猪见嘴不见腿  | 2006-07-27 08:47:00

    赞~~这个问题困扰我很久了。。。

发表评论

  
  
   (点击图片更换验证码)
点击刷新验证码