5

と の 2 つの関数のロジックを理解しようとしてmb_detect_encodingmb_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_encodinghttps : / /en.wikipedia.org/wiki/Windows-1252、バイトx92は Windows-1252 文字エンコーディングで定義されていますが、ISO-8859-1 では定義されていません。

  • mb_detect_encoding第二に、 を返す方法がわかりませんが、同じ文字列と同じ文字エンコーディングを返すことfalsemb_check_encodingできます。true

  • 最後に、厳密モードであるかどうかにかかわらず、文字列が UTF-8 として検出される理由がわかりません。バイトx92は UTF-8 の継続バイトですが、この文字列では、シーケンスの先頭のバイトではなく、有効な文字バイトに続いています。

4

1 に答える 1