首頁 >後端開發 >PHP問題 >如何用php實現unicode和utf8的轉換?

如何用php實現unicode和utf8的轉換?

coldplay.xixi
coldplay.xixi原創
2020-07-10 11:03:163278瀏覽

用php實現unicode和utf8轉換的方法:首先對於【4-6】字節編碼的情況不必考慮;然後出現四字節以上的【utf-8】字符,可以直接視為亂碼忽略掉或轉為unicode實體形式即可,代號為【$utf8char = "{$c};"】。

如何用php實現unicode和utf8的轉換?

用php實現unicode和utf8轉換的方法:

  unicode編碼是實作utf-8與gb系列編碼(gb2312、gbk、gb18030)轉換的基礎,雖然我們也可以直接做一個utf-8到這些編碼的對照表,但很少有人會這麼做,因為utf-8的可變編碼具有不確定性,因此一般情況使用都是unicode與gb編碼的對照表,unicode(UCS-2)其實是utf-8的基礎編碼,utf-8只是它的一種實現而已,兩者存在下面的對應關係:

  • Unicode符號範圍範圍範圍          | UTF-8編碼方式

  • u0000 0000 - u0000 007F  | 0xxxxx

    xxx #u0000 0080 - u0000 07FF   | 110xxxxx 10xxxxxx
  • u0000 0800 - u0000 FFFF   | 1110xxxxx 100xxx 1000 FFFF   | 1110xxxx 10xxx#1000都是居於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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn