加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php实现gb2312和unicode间编码转换

发布时间:2022-03-30 20:05:02 所属栏目:PHP教程 来源:互联网
导读:gb2312 和 unicode 间的编码转换 下面的例子是将 gb2312 转换为 全这种形式 php4.3.1以后的iconv函数很好用的,只是需要自己写一个uft8到unicode的转换函数 查表(gb2312.txt)也行。 ? $text = 电子书库; preg_match_all(/[/x80-/xff]?./,$text,$ar); forea
  gb2312 和 unicode 间的编码转换
 
  下面的例子是将 gb2312 转换为 "全"这种形式
 
  php4.3.1以后的iconv函数很好用的,只是需要自己写一个uft8到unicode的转换函数
  查表(gb2312.txt)也行。
 
  <?
  $text = "电子书库";
  preg_match_all("/[/x80-/xff]?./",$text,$ar);
  foreach($ar[0] as $v)
  echo "&#".utf8_unicode(iconv("GB2312","UTF-8",$v)).";";
  ?>
  <?
  // utf8 -> unicode
  function utf8_unicode($c) {
  switch(strlen($c)) {
  case 1:
  return ord($c);
  case 2:
  $n = (ord($c[0]) & 0x3f) << 6;
  $n = ord($c[1]) & 0x3f;
  return $n;
  case 3:
  $n = (ord($c[0]) & 0x1f) << 12;
  $n = (ord($c[1]) & 0x3f) << 6;
  $n = ord($c[2]) & 0x3f;
  return $n;
  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;
  return $n;
  }
  }
  ?>
  下面的例子是利用php将"全"这中编码转换为gb2312.
 
  <?php
  $str = "TTL全天候自动聚焦";
  $str = preg_replace("|&#([0-9]{1,5});|", "/".u2utf82gb(//1)./"", $str);
  $str = "/$str=/"$str/";";
 
  eval($str);
  echo $str;
 
  function u2utf82gb($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 iconv('UTF-8', 'GB2312', $str);
  }
  ?>
 
  或者是
 
  function unescape($str) {
  $str = rawurldecode($str);
  preg_match_all("/(?:%u.{4})|&#x.{4};|&#/d ;|. /U",$str,$r);
  $ar = $r[0];
  print_r($ar);
  foreach($ar as $k=>$v) {
  if(substr($v,0,2) == "%u")
  $ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,-4)));
  elseif(substr($v,0,3) == "&#x")
  $ar[$k] = iconv("UCS-2","GB2312",pack("H4",substr($v,3,-1)));
  elseif(substr($v,0,2) == "&#") {
  echo substr($v,2,-1)."<br>";
  $ar[$k] = iconv("UCS-2","GB2312",pack("n",substr($v,2,-1)));
  }
  }
  return join("",$ar);
  }
 
  $str = "TTL全天候自动聚焦";
  echo unescape($str); //out TTL全天候自动聚焦

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读