3

mb_detect_encoding()でCP1250 を検出する際に問題があります。私の場合、3 つのエンコーディングを検出します。

mb_detect_encoding($string, 'UTF-8,ISO-8859-2,Windows-1250')

しかし、Windows はサポートされているエンコーディングではありません。解決策はありますか?

4

2 に答える 2

5

mb_detect_encoding 常にシングルバイトエンコーディングを「検出」します。これについては、次のドキュメントを参照してmb_detect_orderください。

mbstring は現在、次のエンコード検出フィルターを実装しています。以下のエンコーディングに無効なバイト シーケンスがある場合、エンコーディングの検出は失敗します。

UTF-8、UTF-7、ASCII、EUC-JP、SJIS、eucJP-win、SJIS-win、JIS、ISO-2022-JP

ISO-8859-X の場合、mbstring は常に ISO-8859-X として検出します。

UTF-16、UTF-32、UCS2、および UCS4 の場合、エンコードの検出は常に失敗します。

結論:

  1. ISO-8859-2 の検出を求めるのは無意味です。常に「はい、それだけです」と表示されます(もちろん、最初に UTF-8 を検出しない限り)。
  2. Windows-1250 はサポートされていませんが、サポートされていたとしても ISO-8859-2 とまったく同じように動作します。

一般に、1 バイトのエンコーディングを正確に検出することは不可能です。PHP でそれを行う必要がある場合は、手動で行う必要があります。非常に良い結果を期待しないでください。

于 2013-06-14T08:51:03.883 に答える
1

ISO-8859-2 を Windows-1250 と区別したり、その他のシングルバイト エンコーディングをその他のエンコーディングと区別したりすることは現実的ではありません。mb_detect_encoding指定された文字列に有効な最初のエンコーディングを提供するだけで、どちらも等しく有効です。エンコーディングの「検出」は、定義上、正確に行うことはできません。

于 2013-06-14T08:47:47.467 に答える