如何在PHP中检测MacRoman编码?

时间:2018-10-28 20:03:50

标签: php encoding php-7.2 mac-roman

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版本。 }。

enter image description here

我需要能够将é与其他编码动态区分开来,以便正确进行转换。

0 个答案:

没有答案