當前位置: 首頁> 最新文章列表> 如何通過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