//php汉字转码 gbk->unicode(utf8)class qswhgbk{ var $qswhdata; function qswhgbk($filename=qswhgbk.php){ $this->qswhdata=file($filename); } function gb2u($gb,$callback=){ /******(qiushuiwuhen 2002-8-15)******/ $ret=; for($i=0;$i if(($p=ord(substr($gb,$i,1)))>127){ $q=ord(substr($gb,++$i,1)); $q=($q-($q>128?65:64))*4; $q=substr($this->qswhdata[$p-128],$q,4); } else $q=dechex($p); if(empty($callback)) $ret.=$q; else { $arr=array(htmlhex,htmldec,escape,u2utf8); if(is_integer($callback)){ if($callback>count($arr))die(invalid function); $ret.=$this->$arr[$callback-1]($q); }else $ret.=$callback($q); } } return $ret; } function htmlhex($str){ return .$str.;; } // 程序员之家 bbs.it-home.org function htmldec($str){ return .hexdec($str).;; } function escape($str){ return hexdec($str) } function u2utf8($str){ /******(qiushuiwuhen 2002-8-15)******/ $sp=!'()*-.0123456789abcdefghijklmnopqrstuvwxyz_abcdefghijklmnopqrstuvwxyz~; $dec=hexdec($str); $bin=decbin($dec); $len=strlen($bin); $arr=array(c0,e0,f0); if($dec>0x7f){ $ret=; for($i=$len,$j=-1;$i>=0;$i-=6,$j++){ if($i>6) $ret=%.dechex(0x80+bindec(substr($bin,$i-6,6))).$ret; else $ret=%.dechex(hexdec($arr[$j])+bindec(substr($bin,0,6-$i))).$ret; } }else{ if(strpos($sp,chr($dec))) $ret=chr($dec); else $ret=%.strtolower($str); } return $ret; }}
复制代码
调用例子:
$words=中文abc;
function ex($str){return [.$str.];}$qswh=new qswhgbk(qswhgbk.php);//如果文件名是qswhgbk.php,可省参数
echo(
不带参数:.$qswh->gb2u($words));echo(/n调用内置函数htmlhex:.$qswh->gb2u($words,1));echo(/n调用内置函数htmldec:.$qswh->gb2u($words,2));echo(/n调用内置函数escape:.$qswh->gb2u($words,3));echo(/n调用内置函数u2utf8:.$qswh->gb2u($words,4));echo(/n调用自定义函数:.$qswh->gb2u($words,ex));
复制代码
效果:
不带参数:4e2d6587416263调用内置函数htmlhex:中文abc调用内置函数htmldec:中文abc调用内置函数escape:%u4e2d%u6587abc调用内置函数u2utf8:%e4%b8%ad%e6%96%87abc调用自定义函数:[4e2d][6587][41][62][63]