/* 显示当前的检测顺序 */
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
https://www.crifan.com/chinese_character_encoding_standard__unicode__code_page/
https://my.oschina.net/junn/blog/282160
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(字符串,新编码,原编码,) 必须开启扩展才行,转码速度也比较慢 在不能转码的字符时会强制转换成 x00 x80,如从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 始可用。