mb_detect_encoding
文字エンコーディングを検出する
&reftitle.description;
stringfalsemb_detect_encoding
stringstring
arraystringnullencodings&null;
boolstrict&false;
エンコーディングの候補の一覧から、
文字列 string
のもっとも可能性が高い文字エンコーディングを検出します。
追加の情報なしに、
意図した文字エンコーディングを自動で検出する行為は、
全く役に立ちません。
これは、暗号化された文字列を鍵なしにデコードする行為に似ています。
"Content-Type" HTTP ヘッダのような、
データを転送された際に付いてくる情報や、
保存された文字エンコーディングに関する指示を指定することが常に望ましいです。
この関数は、全ての文字列が正しいバイト配列とは限らない
マルチバイト文字列を指定するともっとも役に立ちます。
入力となる文字列に誤ったバイトが含まれていた場合、
そのエンコーディングは採用されず、次のものを試します。
&reftitle.parameters;
string
調べる対象の文字列。
encodings
文字エンコーディングの一覧を試す順番に指定します。
このリストは、文字列の配列または、
カンマ区切りのリストで指定できます。
encodings が省略された場合、
または &null; の場合、
現在の detect_order
(
mbstring.detect_order 設定オプション
または mb_detect_order で設定したもの)
を使います。
strict
encodings で指定された
文字エンコーディングのリストの全てに対して、
不正と判定された場合の振る舞いを指定します。
strict が &false; の場合、
もっとも近いと判定された文字エンコーディングが返されます。
strict を &true; にした場合、
&false; が返されます。
strict のデフォルト値は
mbstring.strict_detection 設定オプションで指定できます。
&reftitle.returnvalues;
検出した文字エンコーディングを返します。
指定したエンコーディングの全てに対して、不正と判定された場合は &false; を返します。
&reftitle.changelog;
&Version;
&Description;
8.2.0
mb_detect_encoding は、
以下のテキストでないエンコーディングを返さなくなりました:
"Base64", "QPrint",
"UUencode", "HTML entities",
"7 bit", "8 bit"
&reftitle.examples;
mb_detect_encoding の例
]]>
strict パラメーターの効果
]]>
&example.outputs;
場合によっては、同じバイト配列が、
複数の文字エンコーディング的に正しいかもしれませんが、
どの解釈が意図されたものなのかを知ることは不可能です。
たとえば、
バイト配列 "\xC4\xA2" は、
以下のように解釈できます:
"Ä¢" (U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS のあとに、U+00A2 CENT SIGN が続いたもの)
これらは、ISO-8859-1, ISO-8859-15, Windows-1252
でエンコードされたものと解釈できます。
"ФЂ" (U+0424 CYRILLIC CAPITAL LETTER EF のあとに、 U+0402 CYRILLIC CAPITAL LETTER
DJE が続いたもの)
これは、ISO-8859-5 でエンコードされたものと解釈できます。
"Ģ" (U+0122 LATIN CAPITAL LETTER G WITH CEDILLA)
これは、UTF-8 でエンコードされたものと解釈できます。
複数のエンコーディングと一致した場合の効果
]]>
&example.outputs;
&reftitle.seealso;
mb_detect_order