当前位置: 首页> 最新文章列表> 如何通过 mb_get_info 判断一个字符串是否是 UTF-8 编码

如何通过 mb_get_info 判断一个字符串是否是 UTF-8 编码

gitbox 2025-05-29

在使用 PHP 处理字符串时,确保字符串使用正确的编码格式非常重要,尤其是在涉及多语言内容的场景中。UTF-8 是目前最流行的字符编码之一,它支持世界上绝大多数语言。本文将介绍如何通过 mb_get_info 函数,结合其他 mbstring 扩展的函数,判断一个字符串是否为 UTF-8 编码。

了解 mb_get_info 函数

首先,mb_get_info() 本身是用来获取 mbstring 扩展的配置信息的,比如当前的内部编码、检测顺序等。它并不能直接检测字符串的编码,但它可以告诉我们当前环境是否配置好以检测 UTF-8。
通常,我们会结合 mb_detect_encoding() 函数来实现编码检测。

查看当前的 mbstring 配置,可以这样写:

<?php
// 查看 mbstring 当前配置
print_r(mb_get_info());
?>

输出的信息中包括了:

  • internal_encoding

  • http_input

  • http_output

  • language

  • encoding_translation

  • detect_order

  • substitute_character 等等。

如果 detect_order 包含 UTF-8,我们就可以使用 mb_detect_encoding() 来检测字符串是否为 UTF-8。

判断字符串是否为 UTF-8

结合 mb_detect_encoding() 函数,可以这样来判断:

<?php
function is_utf8($string) {
    // 如果需要,可以先确保 detect_order 中包含 UTF-8
    $info = mb_get_info();
    if (strpos($info['detect_order'], 'UTF-8') === false) {
        // 手动设置检测顺序
        mb_detect_order(['UTF-8', 'ISO-8859-1', 'ASCII']);
    }

    // 使用 mb_detect_encoding 来检测
    return mb_detect_encoding($string, 'UTF-8', true) === 'UTF-8';
}

// 示例
$text = "这是一个测试";

if (is_utf8($text)) {
    echo "字符串是 UTF-8 编码";
} else {
    echo "字符串不是 UTF-8 编码";
}
?>

解释一下这段代码:

  • 先通过 mb_get_info() 查看当前的字符检测顺序;

  • 如果没有 UTF-8,就用 mb_detect_order() 临时调整一下;

  • 使用 mb_detect_encoding(),并传入第三个参数 true,表示进行严格检测;

  • 最后判断返回结果是否是 'UTF-8'

小细节注意

  • 确保 PHP 安装并启用了 mbstring 扩展。

  • mb_detect_encoding() 不是 100% 精确的,特别是在短字符串或纯英文字符串中,但对于一般应用来说足够可靠。

  • 如果你的应用中大量处理编码问题,建议统一输入和输出的编码格式,并通过 mb_internal_encoding('UTF-8') 显式设置内部编码。

示例项目托管地址

如果你想看完整的示例,可以访问:https://gitbox.net/php/utf8-check-demo