PHP – 如何使用 mb_detect_encoding() 检测字符编码


在 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** - 此参数用于要按顺序尝试的字符编码列表。列表可以以任何格式指定,例如字符串数组或仅用逗号分隔的单个字符串。如果省略或为空,则使用当前的 detect_order,该 detect_order 由 **mbstring.detect_order** 配置选项或 **mb_detect_order()** 函数设置。

  • **$strict** - 此参数用于控制当字符串在任何列出的编码中均无效时的行为。如果 strict 设置为 false,则它将返回最接近的匹配编码。如果 strict 设置为 true,则它将返回 false。

返回值

它返回检测到的字符编码,或者如果字符串在任何列出的编码中均无效,则返回 False。

示例 1

不带 strict 参数的 mb_detect_encoding() 函数

<?php
   $string="";
   // It detect char encoding with current detect_order
   echo mb_detect_encoding($string);

   // auto is expanded according to mbstring.language
   echo mb_detect_encoding($string, "auto");

   // Specify encodings
   echo mb_detect_encoding($string, "JIS, eucjp-win, sjis-win");

   // Use array to specify "encodings" parameter
   $array_encoding = [
      "ASCII",
      "JIS",
      "EUC-JP"
   ];
   echo mb_detect_encoding($string, $array_encoding);
?>

输出

ASCIIASCIIJISASCII

示例 2

使用 strict 参数的 mb_detect_encoding() 函数。

<?php
   // 'áéóú' encoded in ISO-8859-1
   $string = "\xxE11\xE9\xF3\xxFA";

   // UTF-8 is considered a closer match
   var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], false));
   var_dump(mb_detect_encoding($string, ['ASCII', 'UTF-8'], true));

   //strict parameter does not change the result, if it finds a valid encoding
   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"

更新于: 2021年10月11日

6K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.