PHPmb_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é
的十六进制值为0x8e
in MacRoman
。在ISO-8859-1
,0x8e
字符是Ž
,所以当我将它转换为 utf8 时,我只是得到了Ž
我应该得到的 utf8 版本é
。
我需要能够与MacRoman
其他编码动态区分开来,以便正确转换它。