現在の位置: ホーム> 最新記事一覧> 文字列がMB_GET_INFOを介してUTF-8エンコードであるかどうかを判断する方法

文字列がMB_GET_INFOを介してUTF-8エンコードであるかどうかを判断する方法

gitbox 2025-05-29

PHPを使用して文字列を使用する場合、特に多言語コンテンツを含むシナリオで、文字列が正しいエンコード形式であることを確認することが重要です。 UTF-8は、現在最も人気のあるキャラクターエンコーディングの1つであり、世界のほとんどの言語をサポートしています。この記事では、文字列がMB_GET_INFO関数を介してUTF-8エンコードであるかどうかを他のMBSTRing拡張機能と組み合わせて判断する方法を紹介します。

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

  • 言語

  • encoding_translation

  • DETECT_ORDER

  • ruftion_characterなど。

detect_orderUTF-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()を使用し、3番目のパラメーターを渡して厳密な検出を示します。

  • 最後に、戻り結果が「UTF-8」であるかどうかを判断します。

小さな詳細に注意してください

  • PHPにMBSTRING拡張機能がインストールされ、有効になっていることを確認してください。

  • MB_DETECT_ENCODING()は、特に短い文字列や純粋な英語の文字列では100%正確ではありませんが、一般的なアプリケーションには十分に信頼できます。

  • アプリケーションがエンコードの問題を大いに扱っている場合は、入力と出力のエンコード形式を統一し、 MB_INTERNAL_ENCODING( 'UTF-8')を介して内部エンコードを明示的に設定することをお勧めします。

サンプルプロジェクトホスティングアドレス

完全な例をご覧になりたい場合は、 https://gitbox.net/php/utf8-check-demoにアクセスできます。