编码转换:unicode(10进制,#12345;)转utf8

遇到问题:我需要把好大一坨类似“ 凡 ;客 ; ”这样的东西转化成可读的utf8编码。
例如 客 ; 代表「客」这个字

一步一步探索:

  • 网上找了很多代码来试验,都以失败告终
  • 直接google搜索 客 ; 变成了google 搜索 「客」这个关键字了
  • 重新google后得知,该类型编码为html页面中可以正常显示为汉字的unicode的10进制表示形式
  • 再次搜索,发现前辈的文章:http://blog.csdn.net/linvo/article/details/6221913, 里面提到

再次翻手册,在utf8_encode函数的评论中看到了一个有用的回复,试验成功!(PS:带评论的手册真他喵的好用~)

直接copy博主的函数使用,发现失败。最后跑到博主提到的 utf8_encode 官方文档里面去找评论,找到博主说的这个评论,发现博主粘贴的时候估计格式变了,导致不能使用,下面附上正确的转换函数。

php    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;
    }

你可能感兴趣的:(编码转换:unicode(10进制,#12345;)转utf8)