如何用php实现unicode和utf8的转换?-PHP问题

资源魔 31 0

用php完成unicode以及utf8转换的办法:起首关于【4-6】字节编码的状况不用思考;而后呈现四字节以上的【utf-8】字符,能够间接视为乱码疏忽掉或转为unicode实体方式便可,代码为【$utf8char = "&#{$c};"】。

用php完成unicode以及utf8转换的办法:

unicode编码是完成utf-8与gb系列编码(gb23十二、gbk、gb18030)转换的根底,尽管咱们也能够间接做一个utf-8到这些编码的对照表,但很少有人会这么做,由于utf-8的可变编码具备没有确定性,因而普通状况应用都是unicode与gb编码的对照表,unicode(UCS-2)其实是utf-8的根底编码,utf-8只是它的一种完成罢了,二者存正在上面的对应关系:

  • Unicode符号范畴 | UTF-8编码形式

  • u0000 0000 - u0000 007F | 0xxxxxxx

  • u0000 0080 - u0000 07FF | 110xxxxx 10xxxxxx

  • u0000 0800 - u0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx

因为今朝utf-8应用的字符都是居于UCS-2的,因而关于4-6字节编码的状况是不用思考的,一样地,正在反向转换的时分,假如呈现四字节以上的utf-8字符,能够间接视为乱码疏忽掉或转为unicode实体方式("&#long int;"方式),而后交给阅读器或相干解析顺序行止理,用php把unicode转为utf-8编码的算法以下:

/*
 * 参数 $c 是unicode字符编码的int类型数值,假如是用二进制读取的数据,正在php中通常要用 hexdec(bin2hex( $bin_unichar )) 这样转换
 */
function uni2utf8( $c )
{
  if ($c < 0x80)
  {
        $utf8char = chr($c);
  }
  else if ($c < 0x800)
  {
        $utf8char = chr(0xC0 | $c >> 0x06).chr(0x80 | $c & 0x3F);
  }
  else if ($c < 0x10000)
  {
        $utf8char = chr(0xE0 | $c >> 0x0C).chr(0x80 | $c >> 0x06 & 0x3F).chr(0x80 | $c & 0x3F);
  }
  //由于UCS-2只有两字节,以是前面的状况是不成能呈现的,这里只是阐明unicode HTML实体编码的用法。
  else
  {
        $utf8char = "&#{$c};";
  }
  return $utf8char;
}

正在今朝的环境范畴内,能够以为 utf-8字符集==unicode(UCS-2),但从实践上,次要字符集关系的蕴含关系以下:

utf-8 > unicode(UCS-2) > gb18030 > gbk > gb2312

因而,假如编码都正确的状况下:

gb2312 => gbk => gb18030 => unicode(UCS-2) => utf-8

这样的一个转变进程,根本上是无损的,但反而言之,由

utf-8 => unicode(UCS-2) => gb18030=> gbk => gb2312

这样的转变进程,是极可能存正在不克不及辨认的字符的,因而,假如关于应用utf-8编码的零碎,只管即便没有要随意马虎的去做反向转换编码的操作。

相干学习保举:PHP编程从入门到通晓

以上就是若何用php完成unicode以及utf8的转换?的具体内容,更多请存眷资源魔其它相干文章!

标签: php php教程 utf8 php故障解决 php使用问题 unicode

抱歉,评论功能暂时关闭!