mb_detect_encodingとmb_check_encodingという2つの関数のロジックを理解しようとしていますが、ドキュメントが貧弱です。 Windowsの-1252エンコーディングを使用した場合、小文字である非常に簡単なテスト文字列PHPのmb_detect_encoding関数とmb_check_encoding関数の結果を理解する
$string = "\x65\x92";
で始まる「」カーリー引用符が続きます。
私は次のような結果を得る:
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
detect_encodingが文字列ではなく、 "Windowsの-1252" は、 "ISO-8859-1" を与える理由https://en.wikipedia.org/wiki/ISO/IEC_8859-1とhttps://en.wikipedia.org/wiki/Windows-1252によると、私は、理解していませんバイトx92はWindows-1252文字エンコーディングで定義されていますが、ISO-8859-1では定義されていません。
第2に、detect_encodingがfalseを返す方法はわかりませんが、check_encodingは同じ文字列と同じ文字エンコーディングに対してtrueを返すことができます。
最後に、私はなぜ文字列がすべてUTF-8、厳密なモードとして検出されるか理解できません。バイトx92は、UTF-8の継続バイトですが、この文字列では、シーケンスの先頭バイトではなく、有効な文字バイトです。