Home  >  Article  >  Backend Development  >  PHP Chinese character transcoding GBK->Unicode (UTF8) encoding conversion

PHP Chinese character transcoding GBK->Unicode (UTF8) encoding conversion

WBOY
WBOYOriginal
2016-07-25 08:53:531579browse
  1. //php汉字转码 GBK->Unicode(UTF8)
  2. class qswhGBK{
  3. var $qswhData;
  4. function qswhGBK($filename="qswhGBK.php"){
  5. $this->qswhData=file($filename);
  6. }
  7. function gb2u($gb,$callback=""){
  8. /******(qiushuiwuhen 2002-8-15)******/
  9. $ret="";
  10. for($i=0;$i if(($p=ord(substr($gb,$i,1)))>127){
  11. $q=ord(substr($gb,++$i,1));
  12. $q=($q-($q>128?65:64))*4;
  13. $q=substr($this->qswhData[$p-128],$q,4);
  14. }
  15. else
  16. $q=dechex($p);
  17. if(empty($callback))
  18. $ret.=$q;
  19. else {
  20. $arr=array("htmlHex","htmlDec","escape","u2utf8");
  21. if(is_integer($callback)){
  22. if($callback>count($arr))die("Invalid Function");
  23. $ret.=$this->$arr[$callback-1]($q);
  24. }else
  25. $ret.=$callback($q);
  26. }
  27. }
  28. return $ret;
  29. }
  30. function htmlHex($str){
  31. return "".$str.";";
  32. } // 程序员之家 bbs.it-home.org
  33. function htmlDec($str){
  34. return "".hexdec($str).";";
  35. }
  36. function escape($str){
  37. return hexdec($str)<256?chr(hexdec($str)):"%u".$str;
  38. }
  39. function u2utf8($str){
  40. /******(qiushuiwuhen 2002-8-15)******/
  41. $sp="!'()*-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~";
  42. $dec=hexdec($str);
  43. $bin=decbin($dec);
  44. $len=strlen($bin);
  45. $arr=array("c0","e0","f0");
  46. if($dec>0x7f){
  47. $ret="";
  48. for($i=$len,$j=-1;$i>=0;$i-=6,$j++){
  49. if($i>6)
  50. $ret="%".dechex(0x80+bindec(substr($bin,$i-6,6))).$ret;
  51. else
  52. $ret="%".dechex(hexdec($arr[$j])+bindec(substr($bin,0,6-$i))).$ret;
  53. }
  54. }else{
  55. if(strpos($sp,chr($dec)))
  56. $ret=chr($dec);
  57. else
  58. $ret="%".strtolower($str);
  59. }
  60. return $ret;
  61. }
  62. }
复制代码

调用例子:

  1. $words="中文Abc";

  2. function ex($str){return "[".$str."]";}

  3. $qswh=new qswhGBK("qswhGBK.php");//如果文件名是qswhGBK.php,可省参数

  4. echo("

    不带参数:".$qswh->gb2u($words));</li> <li>echo("/n调用内置函数htmlHex:".$qswh->gb2u($words,1));</li> <li>echo("/n调用内置函数htmlDec:".$qswh->gb2u($words,2));</li> <li>echo("/n调用内置函数escape:".$qswh->gb2u($words,3));</li> <li>echo("/n调用内置函数u2utf8:".$qswh->gb2u($words,4));</li> <li>echo("/n调用自定义函数:".$qswh->gb2u($words,ex));</p></li> <li> </ol></div> <em onclick="copycode($('code_sd4'));">复制代码</em> </div> <p>效果: </p> 不带参数:4E2D6587416263 调用内置函数htmlHex:中文Abc 调用内置函数htmlDec:中文Abc 调用内置函数escape:%u4E2D%u6587Abc 调用内置函数u2utf8:%e4%b8%ad%e6%96%87Abc 调用自定义函数:[4E2D][6587][41][62][63]</td></tr></table> <div id="comment_46856" class="cm"> </div> <div id="post_rate_div_46856"></div> <br><br></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>Statement:</span><div>The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn</div></div></div><div class="nphpSytBox"><span>Previous article:<a class="dBlack" title="Examples of php encoding conversion methods" href="//m.sbmmt.com/m/faq/315476.html">Examples of php encoding conversion methods</a></span><span>Next article:<a class="dBlack" title="Examples of php encoding conversion methods" href="//m.sbmmt.com/m/faq/315478.html">Examples of php encoding conversion methods</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>Related articles</h2><em><a href="//m.sbmmt.com/m/article.html" class="bBlack"><i>See more</i><b></b></a></em><div class="clear"></div></div><ul class="nphpXgwzList"><li><b></b><a href="//m.sbmmt.com/m/faq/347584.html" title="round robin weighted round robin algorithm php implementation code" class="aBlack">round robin weighted round robin algorithm php implementation code</a><div class="clear"></div></li><li><b></b><a href="//m.sbmmt.com/m/faq/347592.html" title="PHP strip_tags() function to remove HTML, XML and PHP tags from strings" class="aBlack">PHP strip_tags() function to remove HTML, XML and PHP tags from strings</a><div class="clear"></div></li><li><b></b><a href="//m.sbmmt.com/m/faq/347593.html" title="Introduction to PHP strip_tags() to remove HTML, XML and PHP tags" class="aBlack">Introduction to PHP strip_tags() to remove HTML, XML and PHP tags</a><div class="clear"></div></li><li><b></b><a href="//m.sbmmt.com/m/faq/347595.html" title="PHP removes html tags--detailed explanation of the difference between strip_tags and htmlspecialchars" class="aBlack">PHP removes html tags--detailed explanation of the difference between strip_tags and htmlspecialchars</a><div class="clear"></div></li><li><b></b><a href="//m.sbmmt.com/m/faq/347602.html" title="PHP strip_tags method to retain multiple HTML tags" class="aBlack">PHP strip_tags method to retain multiple HTML tags</a><div class="clear"></div></li></ul></div></div><div class="nphpFoot"><div class="nphpFootBg"><ul class="nphpFootMenu"><li><a href="//m.sbmmt.com/m/"><b class="icon1"></b><p>Home</p></a></li><li><a href="//m.sbmmt.com/m/course.html"><b class="icon2"></b><p>Course</p></a></li><li><a href="//m.sbmmt.com/m/wenda.html"><b class="icon4"></b><p>Q&A</p></a></li><li><a href="//m.sbmmt.com/m/login"><b class="icon5"></b><p>My</p></a></li><div class="clear"></div></ul></div></div><div class="nphpYouBox" style="display: none;"><div class="nphpYouBg"><div class="nphpYouTitle"><span onclick="$('.nphpYouBox').hide()"></span><a href="//m.sbmmt.com/m/"></a><div class="clear"></div></div><ul class="nphpYouList"><li><a href="//m.sbmmt.com/m/"><b class="icon1"></b><span>Home</span><div class="clear"></div></a></li><li><a href="//m.sbmmt.com/m/course.html"><b class="icon2"></b><span>Course</span><div class="clear"></div></a></li><li><a href="//m.sbmmt.com/m/article.html"><b class="icon3"></b><span>Article</span><div class="clear"></div></a></li><li><a href="//m.sbmmt.com/m/wenda.html"><b class="icon4"></b><span>Q&A</span><div class="clear"></div></a></li><li><a href="//m.sbmmt.com/m/dic.html"><b class="icon6"></b><span>Dictionary</span><div class="clear"></div></a></li><li><a href="//m.sbmmt.com/m/course/type/99.html"><b class="icon7"></b><span>Manual</span><div class="clear"></div></a></li><li><a href="//m.sbmmt.com/m/xiazai/"><b class="icon8"></b><span>Download</span><div class="clear"></div></a></li><li><a href="//m.sbmmt.com/m/faq/zt" title="Topic"><b class="icon12"></b><span>Topic</span><div class="clear"></div></a></li><div class="clear"></div></ul></div></div><div class="nphpDing" style="display: none;"><div class="nphpDinglogo"><a href="//m.sbmmt.com/m/"></a></div><div class="nphpNavIn1"><div class="swiper-container nphpNavSwiper1"><div class="swiper-wrapper"><div class="swiper-slide"><a href="//m.sbmmt.com/m/" >Home</a></div><div class="swiper-slide"><a href="//m.sbmmt.com/m/article.html" class="hover">Article</a></div><div class="swiper-slide"><a href="//m.sbmmt.com/m/wenda.html" >Q&A</a></div><div class="swiper-slide"><a href="//m.sbmmt.com/m/course.html" >Course</a></div><div class="swiper-slide"><a href="//m.sbmmt.com/m/faq/zt" >Topic</a></div><div class="swiper-slide"><a href="//m.sbmmt.com/m/xiazai" >Download</a></div><div class="swiper-slide"><a href="//m.sbmmt.com/m/game" >Game</a></div><div class="swiper-slide"><a href="//m.sbmmt.com/m/dic.html" >Dictionary</a></div><div class="clear"></div></div></div><div class="langadivs" ><a href="javascript:;" class="bg4 bglanguage"></a><div class="langadiv" ><a onclick="javascript:setlang('zh-cn');" class="language course-right-orders chooselan " href="javascript:;"><span>简体中文</span><span>(ZH-CN)</span></a><a onclick="javascript:;" class="language course-right-orders chooselan chooselanguage" href="javascript:;"><span>English</span><span>(EN)</span></a><a onclick="javascript:setlang('zh-tw');" class="language course-right-orders chooselan " href="javascript:;"><span>繁体中文</span><span>(ZH-TW)</span></a><a onclick="javascript:setlang('ja');" class="language course-right-orders chooselan " href="javascript:;"><span>日本語</span><span>(JA)</span></a><a onclick="javascript:setlang('ko');" class="language course-right-orders chooselan " href="javascript:;"><span>한국어</span><span>(KO)</span></a></div></div><script> var swiper = new Swiper('.nphpNavSwiper1', { slidesPerView : 'auto', observer: true,//修改swiper自己或子元素时,自动初始化swiper observeParents: true,//修改swiper的父元素时,自动初始化swiper }); </script></div></div><!--顶部导航 end--><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>