関数の概要
mb_detect_encoding は、PHPのマルチバイト文字列関数の一つで、指定した文字列の文字エンコーディング(文字コード)を判別するために使います。複数のエンコーディングを候補として指定でき、最も適合するものを返すため、多言語対応や外部から取得した文字列の処理時に非常に便利です。
パラメータの説明
string $str— 文字コードを判定したい対象の文字列。array|string|null $encoding_list— 判定に使用するエンコーディングのリスト。省略すると、内部エンコーディング設定やデフォルトのリストが使われます。配列またはカンマ区切りの文字列で指定可能。bool $strict— 厳密モードの指定。trueを指定すると、厳密に判定します。省略時はfalse。
戻り値
判別に成功した場合は検出した文字エンコーディング名を文字列で返します。判定に失敗した場合は FALSE を返します。
使用例
基本的な使い方
<?php
$str = "こんにちは";
$encoding = mb_detect_encoding($str);
echo "文字コードは: " . $encoding;
?>
この例は日本語の文字列の文字コードを自動判別します。通常は UTF-8 が多いため、結果として UTF-8 が返ります。
複数のエンコーディング候補から判定
<?php
$str = "x82xb1x82xf1x82xc9x82xbfx82xcd"; // Shift_JISの「こんにちは」
$possible_encodings = ["UTF-8", "Shift_JIS", "EUC-JP"];
$encoding = mb_detect_encoding($str, $possible_encodings);
echo "判定された文字コード: " . $encoding;
?>
エンコーディングの候補を配列で指定し、正確にShift_JISを判別しています。
厳密モードを使う例
<?php
$str = "abc";
$encoding = mb_detect_encoding($str, ["ASCII", "UTF-8"], true);
echo "厳密モードで判定: " . $encoding;
?>
厳密モードを有効にすることで、より正確な判定が可能です。ASCIIとUTF-8は多く重複部分がありますが、厳密モードで安全に判定できます。
関連する関数
mb_convert_encoding— 文字列のエンコーディングを変換する関数mb_list_encodings— 利用可能な文字エンコーディングのリストを取得mb_detect_order— デフォルトのエンコーディング判定順序を設定または取得
まとめ
mb_detect_encoding は、PHPで文字列の文字コードを動的に判定したい場合に非常に役立ちます。複数の候補を指定でき、厳密モードも利用可能なため、実務の多言語対応や外部文字列処理に最適です。関連関数と合わせて活用することで、文字コードの誤判定や文字化けを防ぐことができます。
