PHP – 如何使用 mb_detect_encoding() 检测字符编码
phpserver side programmingprogramming更新于 2025/7/18 21:22:17
在 PHP 中,mb_detect_encoding() 用于检测字符编码。它可以从有序的候选列表中检测字符串的字符编码。此函数在 PHP 4.0.6 或更高版本中受支持。
mb_detect_encoding() 适用于多字节编码,因为并非所有字节序列都能构成有效的字符串。如果输入字符串包含此类序列,则该编码将被拒绝,并检查下一个编码。
语法
string mb_detect_encoding(str $string, str $encoding, bool $strcit)
如果没有一些附加信息,字符编码的自动检测并不完全可靠。字符编码检测类似于不使用密钥解码加密字符串。content-Type HTTP 标头可用于指示随数据一起存储或传输的字符编码。
参数
mb_detect_encoding 函数接受三个参数 −
$string − 此参数用于指定要检查的字符串。
$encoding − 此参数用于指定要按顺序尝试的字符编码列表。该列表可以采用任何格式指定,例如字符串数组或仅用逗号分隔的单个字符串。如果编码省略或为空,则使用 mbstring.detect_order 配置选项设置当前的 detect_order,或使用 mb_detect_order() 函数。
$strict − 此参数用于控制当字符串在任何列出的编码中无效时的行为。如果 strict 设置为 false,则返回最接近的匹配编码。如果 strict 设置为 true,则返回 false。
返回值
返回检测到的字符编码,如果字符串在任何列出的编码中无效,则返回 False。
示例 1
不带 strict 参数的 mb_detect_encoding() 函数
<?php
$string="";
// 它使用当前detect_order检测字符编码
echo mb_detect_encoding($string);
// auto 根据 mbstring.language 进行扩展
echo mb_detect_encoding($string, "auto");
// 指定编码
echo mb_detect_encoding($string, "JIS, eucjp-win, sjis-win");
// 使用数组指定"encodings"参数
$array_encoding = [
"ASCII",
"JIS",
"EUC-JP"
];
echo mb_detect_encoding($string, $array_encoding);
?>
输出
ASCIIASCIIJISASCII
示例 2
mb_detect_encoding() 函数使用严格参数。
<?php // 'áéóú' encoded in ISO-8859-1 $string = "\xxE11\xE9\xF3\xxFA"; // UTF-8 被认为是更接近的匹配 var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], false)); var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], true)); //如果找到有效的编码,则严格参数不会改变结果 var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8', 'ISO-8859-1'], false)); var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8', 'ISO-8859-1'], true)); ?>
输出
string(5) "UTF-8" bool(false) string(10) "ISO-8859-1" string(10) "ISO-8859-1"

