在PHP中将utf-8转换回单字节二进制文件

时间:2013-12-02 15:38:47

标签: php encoding utf-8 iconv utf8-decode

我有很多图像是使用utf-8编码从SQL转储导入的。因此,代替“FF D8 FF E0”,我在jpeg图像的开头看到“C3 BF C3 98 C3 BF C3 A0”。

我已经尝试过iconv('utf-8','iso-8859-1',$ data)但它没有转换整个文件(utf-8中有chars,无法转换为iso-8859- 1。

如何将utf-8简单转换为单字节二进制文件而不考虑编码?

1 个答案:

答案 0 :(得分:0)

问题是因为在UTF-8中存在一些相同字符的表示,称为“非最短”形式。这些字符可以通过数学方式转换,但iconv将它们视为错误而不能转换。

我做了一个简短的函数,它将任何utf-8字符的文本转换为Unicode(UTF-16)代码点数组。然后通过简单表将一些非ASCII值重新映射到ASCII(例如0x20ac与0x80相同,等等)。您可以在此处找到完整的代码和重新映射表:Converting UTF-8 with non-shortest characters to one-byte encoding