文字列のエンコーディングを検出できるようにする必要がありますが、mb_detect_encoding が機能していません。
ファイル ( ) から文字列を取得しfile_get_contents
ましたが、問題を引き起こしたファイルが UTF-16 LE であることがわかりました。ただし、ドキュメントから、このエンコーディングの検出は不可能であることがわかります( mb_detect_order :「UTF-16、UTF-32、UCS2、および UCS4 の場合、エンコーディングの検出は常に失敗します。」)。
PHPで信頼できる方法で文字列のエンコーディングを取得するにはどうすればよいですか? 可能なエンコーディングはありますか?
これを解決しようとして数時間を失いましたが、適切なリソースが見つかりませんでした。これを自動化できるようにしたいので、ファイルのエンコーディングが変更された場合、プログラムがそれを処理できるようになります (別の Web サイトからファイルを取得しています)。
これを試してみましたが成功しませんでした.UTF-8が表示されます:
mb_detect_encoding($proper_string, 'UTF-16LE,UCS-2,UTF-8,ASCII', true)
私もこれを試しました:
echo 'mb_check_encoding($fileContents, \'UTF-8\'): ' . mb_check_encoding($fileContents, 'UTF-8') . "\n";
//true
echo 'mb_check_encoding($fileContents, \'UTF-16\'): ' . mb_check_encoding($fileContents, 'UTF-16') . "\n";
//true
echo 'mb_check_encoding($fileContents, \'UTF-16LE\'): ' . mb_check_encoding($fileContents, 'UTF-16LE') . "\n";
//true
echo 'mb_check_encoding($fileContents, \'UCS-2\'): ' . mb_check_encoding($fileContents, 'UCS-2') . "\n";
//true
echo 'mb_check_encoding($fileContents, \'ISO-8859-1\'): ' . mb_check_encoding($fileContents, 'ISO-8859-1') . "\n";
//true