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