3

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 進値は0x8einMacRomanです。ではISO-8859-10x8e文字はであるため、それを utf8 に変換すると、 を取得する必要があるときにŽの utf8 バージョンを取得するだけです。Žé

ここに画像の説明を入力

MacRoman適切に変換できるように、他のエンコーディングと動的に区別できる必要があります。

4

0 に答える 0