PHP中Unicode编码问题的解决方法
网上找了好多解决方案,但都是什么mb_xxxx函数找不到或是不支持iconv。好像是PHP版本太低了。
好不容易找了一个不依赖于函数实现的版本,但是转换过来的汉字是UTF8编码的。
又找啊找,找了一晚上,把UTF8到GB2312的转换问题搞定了。
使用了一个chinese的类来查表转换的,也不依赖于PHP的版本。
php代码
- /*
- * 用处 :此函数用来逆转javascript的escape函数编码后的字符。
- * 关键的正则查找我不知道有没有问题.
- * 参数:javascript编码过的字符串。
- * 如:phpUnescape("%u5927")= 大
- * 解码结果为UTF8的编码
- */
- function phpUnescape($escstr){
- preg_match_all("/%u[0-9A-Za-z]{4}|%.{2}|[0-9a-zA-Z.+-_]+/",$escstr,$matches);
- $ar = &$matches[0];
- $c = "";
- foreach($ar as $val){
- if (substr($val,0,1)!="%") { //如果是字母数字+-_.的ascii码
- $c .=$val;
- }
- elseif (substr($val,1,1)!="u") { //如果是非字母数字+-_.的ascii码
- $x = hexdec(substr($val,1,2));
- $c .=chr($x);
- }
- else { //如果是大于0xFF的码
- $val = intval(substr($val,2),16);
- if($val < 0×7F){ // 0000-007F
- $c .= chr($val);
- }elseif($val < 0×800) { // 0080-0800
- $c .= chr(0xC0 | ($val / 64));
- $c .= chr(0×80 | ($val % 64));
- }else{ // 0800-FFFF
- $c .= chr(0xE0 | (($val / 64) / 64));
- $c .= chr(0×80 | (($val / 64) % 64));
- $c .= chr(0×80 | ($val % 64));
- }
- }
- }
- return $c;
- }
- //UTF8 TO GB2312 下面这个类请自己到网上去搜
- require_once("class.Chinese.php");//这是一个转换汉字编码的类
- $cnvert = new Chinese("UTF8","GB2312",trim($tmp_str));
- $actual_value=$cnvert->ConvertIT();
Tags: php
上一篇:
毕业典礼
下一篇:
悲欢离合
相关日志推荐
神猪见嘴不见腿 | 2006-07-27 08:47:00
赞~~这个问题困扰我很久了。。。