PHPはエンコーディングをmb_detect_encoding()
理解していません。MacRoman
私のアプリでは、ユーザーが csv 形式でデータをアップロードできますが、ユーザーは技術に精通していないため、データを utf8 に変換する必要があります。私は彼ら全員にそれを行う方法とエンコーディングを制御する方法を理解してもらうことは決してできません.
これは私がやっていることです:
$encoding_detection_order = array('UTF-8', 'UTF-7', 'ASCII', 'ISO-8859-1', 'EUC-JP', 'SJIS', 'eucJP-win', 'SJIS-win', 'JIS', 'ISO-2022-JP', );
$encoding = mb_detect_encoding($value, $detection_order, true);
$converted_value = iconv($encoding, 'UTF-8//TRANSLIT', $value);
これはほとんどの状況でうまく機能しますが、私のユーザーが Mac を使用していて、CSV をMacRoman
エンコーディングで保存する場合、通常、上記のコードはテキストを誤って検出し、ISO-8859-1
それにより でiconv()
不適切な出力が生成されます。
たとえば、アクセント付きの e inJaimé
の 16 進値は0x8e
inMacRoman
です。ではISO-8859-1
、0x8e
文字はであるため、それを utf8 に変換すると、 を取得する必要があるときにŽ
の utf8 バージョンを取得するだけです。Ž
é
MacRoman
適切に変換できるように、他のエンコーディングと動的に区別できる必要があります。