PHP中iptcparse()解析IPTC元数据特殊字符乱码及JSON编码问题
解决IPTC元数据特殊字符乱码及UTF-8兼容问题
我使用一张测试图片执行以下PHP代码读取IPTC元数据:
getimagesize("sample.jpg", $image_info); if (isset($image_info["APP13"])) { $iptc = iptcparse($image_info["APP13"]); var_dump($iptc); }
浏览器输出中的版权符号被替换成了�,显示内容为:� Copyright 2020 IPTC (Test Images) - www.iptc.org。我需要确保特殊字符不出现乱码,且最终要将该数组通过json_encode()处理,担心这些乱码字符会引发问题。
更新1:
按照建议使用utf8_encode递归处理数组,添加了以下代码:
array_walk_recursive($iptc, function (&$entry) { $entry = utf8_encode($entry); });
版权符号的乱码问题得到解决,但在iptcparse返回结果的["2#000"][0]索引中出现了\u0000\u0004字符,推测这与IPTC规范相关,目前正在排查原因。
更新2:
由于utf8_encode()已被废弃,我尝试在脚本中添加ini_set('default_charset', 'UTF-8');,但没有效果;将array_walk_recursive中的处理逻辑改为mb_convert_encoding($entry, 'UTF-8'),同样无法解决问题。
内容的提问来源于stack exchange,提问作者StackOverflowNewbie
相关产品推荐
相关产品推荐

