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上并且以MacRoman
编码保存CSV,则上述代码通常会错误地将文本检测为ISO-8859-1
,从而导致iconv()
会产生不良输出。
例如,Jaimé
中的重音符号e在0x8e
中的十六进制值为MacRoman
。在ISO-8859-1
中,0x8e
字符是Ž
,因此,当我将其隐蔽到utf8时,我应该得到{{1}时才得到Ž
的utf8版本。 }。
我需要能够将é
与其他编码动态区分开来,以便正确进行转换。