mb_detect_encoding

関数の概要

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で文字列の文字コードを動的に判定したい場合に非常に役立ちます。複数の候補を指定でき、厳密モードも利用可能なため、実務の多言語対応や外部文字列処理に最適です。関連関数と合わせて活用することで、文字コードの誤判定や文字化けを防ぐことができます。