天天看點

字元集轉換

/* 顯示目前的檢測順序 */

echo implode(", ", mb_detect_order());

mb_detect_encoding:檢測字元編碼

mb_detect_order可以設定檢測字元的循序

mb_detect_order('ASCII,ANSI,GB2312,BIG5,GBK,GB18030,Unicode,UTF-8,UTF-16,UTF-32');

GB18030      CP54936

GBK             微軟Windows中現在的CP936

GB2312       微軟Windows中以前的CP936  EUC-CN

mb_detect_order — 設定/擷取 字元編碼的檢測順序

該設定會影響 mb_detect_encoding() 和 mb_send_mail()

對于 UTF-16、UTF-32、 UCS2 和 UCS4,編碼檢測總是會失敗。

UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP

對于 ISO-8859-*,mbstring 總是檢測為 ISO-8859-*。

  • mb_internal_encoding() - 設定/擷取内部字元編碼
  • mb_http_input() - 檢測 HTTP 輸入字元編碼
  • mb_http_output() - 設定/擷取 HTTP 輸出字元編碼
  • mb_send_mail() - 發送編碼過的郵件

阿薩德

總是檢測為 ISO-8859-1的情況:   detect_order = ISO-8859-1, UTF-8

總是檢測為 UTF-8,由于 ASCII/UTF-7 的值對 UTF-8 是有效的:detect_order = UTF-8, ASCII, UTF-7

ASCII   英語

ISO  歐洲語系

Unicode,理論上包括了世界上所有的語言(少許如盲語,蒙語。苗語、高棉等少數不支援)

UTF-8,針對Unicode的可變長字元集(萬國語)

GB2312  包含簡體中文和英文

GBK 或者是 GB18030含有簡體和繁體和英文,三者的關系是 GB18030 > GBK > GB2312

字元編碼轉換:

iconv('GB2312', 'UTF-8//IGNORE', $str);      //将字元串的編碼從GB2312轉到UTF-8       c底層實作 轉碼速度快

// utf8轉gb2312 可能會被截斷而報錯;如utf8的中文字元”—”轉換gb2312。可以加//IGNORE或者//TRANSLIT解決

// //IGNORE 忽略不能轉換的字元

// //TRANSLIT如果在目标編碼中找不到與源編碼相比對的字元,會選擇相似的字元進行轉換

mb_convert_encoding(字元串,新編碼,原編碼,)   必須開啟擴充才行,轉碼速度也比較慢 在不能轉碼的字元時會強制轉換成\0x00\0x80,如從utf8轉換成gbk時

一般情況下用 iconv,隻有當遇到無法确定原編碼是何種編碼,或者iconv轉化後無法正常顯示時才用mb_convert_encoding 函數

mbstring該 PHP 擴充支援的字元編碼有以下幾種: (即帶有mb_xxx的函數)
UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*
ISO-2022-JP
ISO-2022-JP-MS
CP932
CP51932
SJIS-mac** (别名: MacJapanese)
SJIS-Mobile#DOCOMO** (别名: SJIS-DOCOMO)
SJIS-Mobile#KDDI** (别名: SJIS-KDDI)
SJIS-Mobile#SOFTBANK** (别名: SJIS-SOFTBANK)
UTF-8-Mobile#DOCOMO** (别名: UTF-8-DOCOMO)
UTF-8-Mobile#KDDI-A**
UTF-8-Mobile#KDDI-B** (别名: UTF-8-KDDI)
UTF-8-Mobile#SOFTBANK** (别名: UTF-8-SOFTBANK)
ISO-2022-JP-MOBILE#KDDI** (别名: ISO-2022-JP-KDDI)
JIS
JIS-ms
CP50220
CP50220raw
CP50221
CP50222
ISO-8859-1*
ISO-8859-2*
ISO-8859-3*
ISO-8859-4*
ISO-8859-5*
ISO-8859-6*
ISO-8859-7*
ISO-8859-8*
ISO-8859-9*
ISO-8859-10*
ISO-8859-13*
ISO-8859-14*
ISO-8859-15*
ISO-8859-16*
byte2be
byte2le
byte4be
byte4le
BASE64
HTML-ENTITIES
7bit
8bit
EUC-CN*
CP936
GB18030**
HZ
EUC-TW*
CP950
BIG-5*
EUC-KR*
UHC (CP949)
ISO-2022-KR
Windows-1251 (CP1251)
Windows-1252 (CP1252)
CP866 (IBM866)
KOI8-R*
KOI8-U*
ArmSCII-8 (ArmSCII8)
* 表示該編碼也可以在正規表達式中使用。

** 表示該編碼自 PHP 5.4.0 始可用。