PHP中的JPEG IPTC数据无法正确显示UTF-8字符

时间:2012-12-09 06:14:41

标签: php exif iptc

从图像中读取IPTC数据时,通过PHP读取时,UTF-8重音字符无法正常显示。

例如:é,ø和ü

将标题内容类型设置为UTF8,而不是字符,我在黑色菱形中得到问号。 如果没有设置内容类型,那么我会得到一个短划线字符: -

以下是用于读取IPTC块的代码:

$file = '/path/to/image.jpg';
getimagesize($file, $info);
$iptc = iptcparse($info['APP13']);

我还尝试将完全相同的图像上传到同一台服务器上的WordPress安装,并正确剥离重音字符,并用它的基本拉丁语等效替换它。我不介意这是不是最终结果,我只想正确阅读这些字符。

有关如何从图像中获取完整且正确的数据的任何想法?

1 个答案:

答案 0 :(得分:4)

回答有点迟,但由于我遇到同样的问题,显示特殊字符č š ž(以斯洛文尼亚字母显示),我也可以回答以供参考。

这个问题的解决方案实际上与php无关,而是与IPTC数据编码有关。默认情况下,大多数可以写入IPTC数据的软件都会将其存储为纯ASCII格式。起初我使用了Adobe Bridge - 它实际上显示了开始标记图像时应该显示的所有特殊字符 - 但是一旦你想用PHP解析那些数据,你实际上看不到特殊字符。 (我将不得不再次检查这部分,但主要的问题是发生了两种不同的编码 - 一种编码图像上的IPTC数据,一种在可以处理IPTC数据的程序中显示该数据 - 或者沿着这条线)

为了解决这个问题,我使用了一个名为ExifTool的程序,它是一个了不起的软件,可以让你管理几乎所有图像上的数据。

比我用它将所有IPTC编码转换为UTF-8 - 从那时起,我只需要重新制作具有损坏字符的图像(Adobe Bridge正确显示,但显然不能以正确的编码保存)。

在文件夹中的所有图像上完成此操作的命令是:

exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8

如果您不熟悉cmd工作,也可以下载ExifTool GUI

我还没有找到能够更快完成同样任务的更好的程序。