と の 2 つの関数のロジックを理解しようとしてmb_detect_encoding
いmb_check_encoding
ますが、ドキュメントが貧弱です。非常に単純なテスト文字列から始めます
$string = "\x65\x92";
Windows-1252エンコーディングを使用する場合、小文字の「a」の後に中括弧が続きます。
次の結果が得られます。
mb_detect_encoding($string,"Windows-1252"); // false
mb_check_encoding($string,"Windows-1252"); // true
mb_detect_encoding($string,"ISO-8859-1"); // ISO-8859-1
mb_check_encoding($string,"ISO-8859-1"); // true
mb_detect_encoding($string,"UTF-8",true); // false
mb_detect_encoding($string,"UTF-8"); // UTF-8
mb_check_encoding($string,"UTF-8"); // false
https://en.wikipedia.org/wiki/ISO/IEC_8859-1および
mb_detect_encoding
https : / /en.wikipedia.org/wiki/Windows-1252、バイトx92
は Windows-1252 文字エンコーディングで定義されていますが、ISO-8859-1 では定義されていません。mb_detect_encoding
第二に、 を返す方法がわかりませんが、同じ文字列と同じ文字エンコーディングを返すことfalse
がmb_check_encoding
できます。true
最後に、厳密モードであるかどうかにかかわらず、文字列が UTF-8 として検出される理由がわかりません。バイト
x92
は UTF-8 の継続バイトですが、この文字列では、シーケンスの先頭のバイトではなく、有効な文字バイトに続いています。