用如下uc2gb函数分析字符串会出现数字丢失的解决办法

用如下函数分析字符串会出现数字丢失的现象。

function uc2gb($str) {
$ret = '';
for( $i=0; $i<strlen($str)/2; $i++ ) {
$strchar='';
$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
$strdec= dechex($charcode);
for ( $j=0; $j<strlen($strdec); $j+=2 )$strchar.=chr(hexdec(substr($strdec,$j,2)));
$ret .=iconv("UTF-16","gb2312",$strchar);
}return $ret;
}

比如,使用该函数以后

源数据中的“特色服务6”将会返回为"特色服务"

解决办法,用如下两个函数取代上面函数

function uc2gb($str) {
$ret = '';
for( $i=0; $i<strlen($str)/2; $i++ ) {
$charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
$ret .= '&#'.$charcode.";";
$ret = preg_replace("|&#([0-9]{1,5});|", "/".u2utf82gb(//1)./"", $ret);
$ret = "/$ret=/"$ret/";";
eval($ret);
}return $ret;
}

function u2utf82gb($c){
    $str="";
    if ($c < 0x80) {
         //$str.=$c;
   $str.=chr($c);
    } else if ($c < 0x800) {
         $str.=chr(0xC0 | $c>>6);
         $str.=chr(0x80 | $c & 0x3F);
    } else if ($c < 0x10000) {
         $str.=chr(0xE0 | $c>>12);
         $str.=chr(0x80 | $c>>6 & 0x3F);
         $str.=chr(0x80 | $c & 0x3F);
    } else if ($c < 0x200000) {
         $str.=chr(0xF0 | $c>>18);
         $str.=chr(0x80 | $c>>12 & 0x3F);
         $str.=chr(0x80 | $c>>6 & 0x3F);
         $str.=chr(0x80 | $c & 0x3F);
    }
    return iconv('UTF-8', 'GB2312', $str);
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值