21,887
社区成员
发帖
与我相关
我的任务
分享
<!--
这是底层的东西,在接口对接报文传输中用的比较多。如银行的8583报文。
//-->
function utf8_unicode($c, $type=false) {
switch(strlen($c)) {
case 1:
if($type) return ord($c);
return $c;
case 2:
$n = (ord($c[0]) & 0x3f) << 6;
$n += ord($c[1]) & 0x3f;
break;
case 3:
$n = (ord($c[0]) & 0x1f) << 12;
$n += (ord($c[1]) & 0x3f) << 6;
$n += ord($c[2]) & 0x3f;
break;
case 4:
$n = (ord($c[0]) & 0x0f) << 18;
$n += (ord($c[1]) & 0x3f) << 12;
$n += (ord($c[2]) & 0x3f) << 6;
$n += ord($c[3]) & 0x3f;
break;
}
return $type ? $n : pack('n', $n);
}
function unicode_utf8($c) {
if(! is_numeric($c)) {
$c = hexdec(bin2hex($c));
}
$str="";
if ($c < 0x80) {
$str .= $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 $str;
}