ファイルエンコーディングの検出に関しては、Baidu にたくさんありますが、実際には便利なものはありません mb_detect_encoding 検出を提案しましたが、何らかの理由で失敗し、何も出力されませんでした。拡張版、BOM を使用して判断しましたが、これはまったく信頼できません。最終的に、PHP マニュアルの mb_detect_encoding 関数の例に基づいて、自分で検出関数を作成しました。
エンコードを自動検出し、指定したエンコードに従ってファイルを読み取る機能とソースコードも含まれています。コードをコピーします。コードは次のとおりです:
/**
* ファイルのエンコーディングを検出します
* @param string $file ファイルパス
* @return string|null はエンコーディング名または null を返します
*/
関数 detect_encoding($file) {
$list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
$str = file_get_contents($file);
foreach ($list を $item) {
$tmp = mb_convert_encoding($str, $item, $item);
if (md5($tmp) == md5($str)) {
$item;
} }
}
null を返す;
}
/**
* エンコーディングを自動的に解析してファイルを読み取ります
* @param string $file ファイルパス
* @param string $charset 読み取りエンコーディング
* @return 文字列は読み取ったコンテンツを返します
*/
関数 auto_read($file, $charset='UTF-8') {
$list = array('GBK', 'UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
$str = file_get_contents($file);
foreach ($list を $item) {
$tmp = mb_convert_encoding($str, $item, $item);
if (md5($tmp) == md5($str)) {
return mb_convert_encoding($str, $charset, $item);
} }
}
"" を返す;
}
。