编码转换:unicode(10进制,〹)转utf8
遇到问题:我需要把好大一坨类似“ 凡 ;客 ; ”这样的东西转化成可读的utf8编码。
例如 客 ; 代表「客」这个字
一步一步探索:
- 网上找了很多代码来试验,都以失败告终
- 直接google搜索 客 ; 变成了google 搜索 「客」这个关键字了
- 重新google后得知,该类型编码为html页面中可以正常显示为汉字的unicode的10进制表示形式
- 再次搜索,发现前辈的文章:http://blog.csdn.net/linvo/article/details/6221913, 里面提到
再次翻手册,在utf8_encode函数的评论中看到了一个有用的回复,试验成功!(PS:带评论的手册真他喵的好用~)
直接copy博主的函数使用,发现失败。最后跑到博主提到的 utf8_encode 官方文档里面去找评论,找到博主说的这个评论,发现博主粘贴的时候估计格式变了,导致不能使用,下面附上正确的转换函数。
function html_to_utf8 ($data)
{
$data=htmlspecialchars_decode(htmlspecialchars_decode($data));
return preg_replace("/\\&\\#([0-9]{3,10})\\;/e", '_html_to_utf8("\\1")', $data);
}
function _html_to_utf8($data) {
if ($data > 127) {
$i = 5;
while ( ($i --) > 0 ) {
if ($data != ($a = $data % ($p = pow ( 64, $i )))) {
$ret = chr ( base_convert ( str_pad ( str_repeat ( 1, $i + 1 ), 8, "0" ), 2, 10 ) + (($data - $a) / $p) );
for($i; $i > 0; $i --)
$ret .= chr ( 128 + ((($data % pow ( 64, $i )) - ($data % ($p = pow ( 64, $i - 1 )))) / $p) );
break;
}
}
} else
$ret = "&#$data;";
return $ret;
}