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

无法在PHP中正确显示JPEG IPTC数据中的UTF-8字符,php,exif,iptc,Php,Exif,Iptc,从图像读取IPTC数据时,通过PHP读取UTF-8重音字符时无法正确显示 例如:é、ø和ü 标题内容类型设置为UTF8,而不是字符,我得到一个黑色菱形的问号。� 如果未设置任何内容类型,则我将获得一个破折号字符:- 以下是用于读取IPTC块的代码: $file = '/path/to/image.jpg'; getimagesize($file, $info); $iptc = iptcparse($info['APP13']); 我还尝试将完全相同的图像上传到同一台服务器上的WordPre

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

例如:é、ø和ü

标题内容类型设置为UTF8,而不是字符,我得到一个黑色菱形的问号。� 如果未设置任何内容类型,则我将获得一个破折号字符:-

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

$file = '/path/to/image.jpg';
getimagesize($file, $info);
$iptc = iptcparse($info['APP13']);
我还尝试将完全相同的图像上传到同一台服务器上的WordPress安装中,它正确地去除了重音字符,并将其替换为基本的拉丁语。我不介意这是否是最终结果,我只想正确地阅读字符


关于如何从图像中获得完整和正确的数据,有什么想法吗?

回答有点晚,但由于我在显示特殊字符时遇到了与
šš
相同的问题(以斯洛文尼亚字母表显示),我也可以回答,以供将来参考

这个问题的解决方案实际上与php无关,而是与IPTC数据编码有关。默认情况下,大多数能够写入IPTC数据的软件将以普通ASCII格式存储数据。首先,我使用了AdobeBridge——当你开始标记你的图像时,它实际上会显示所有的特殊字符——但是一旦你想用PHP解析数据,你实际上就看不到特殊字符了。(我必须再次检查这一部分,但主要问题是出现了两种不同的编码方式——一种是在图像上编码IPTC数据,另一种是在可以处理IPTC数据的程序中显示该数据——或者类似的方式)

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

然后我用它将所有IPTC编码转换为UTF-8——从那时起,我只需重新标记有损坏字符的图像(Adobe Bridge正确显示了这些字符,但显然没有以正确的编码保存)

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

exiftool -tagsfromfile @ -iptc:all -codedcharacterset=utf8
如果您不熟悉cmd的工作,也可以下载


我还没有找到任何更好的程序可以更快地完成同样的任务。

要将字符集设置为utf8,请使用以下代码:

$iptc = array(
  '1#090' => "\x1B%G" //utf8
);
更改代码的该部分,如下所示:

// Convert the IPTC tags into binary code
$data = '';

foreach($iptc as $tag => $string) 
{
  $rec = substr($tag, 0,1);
  $tag = substr($tag, 2);
  $data .= iptc_make_tag($rec, $tag, $string);
}

// Embed the IPTC data
$content = iptcembed($data, $path);

根据谷歌的快速搜索。检测使用的字符集并使用
mb\u convert\u编码
将其转换为utf-8。ExifTool非常棒,谢谢。有问题的字符仍然显示不正确,但是,我在XMP数据中也找到了正确的版本。