编码转换:unicode(10进制)转utf8

 

遇到问题:我需要把好大一坨类似“ &#20961&#23458 ”这样的东西转化成可读的utf8编码。

 

一步一步探索:

1、unicode打头的扩展函数在我的PHP5.2.x中还不可用

2、网上找了很多代码来试验,都以失败告终

3、重新google后得知,该类型编码为html页面中可以正常显示为汉字的unicode的10进制表示形式

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

 

贴代码:

function html_to_utf8($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; } 

 

注:原帖中正则部分本包含;(即每个字符是以分号结尾),而我的数据没有分号,所以就去掉鸟~

 

你可能感兴趣的:(html,PHP,function,Google,扩展)