首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >php exif_read_data()不是utf-8格式

php exif_read_data()不是utf-8格式
EN

Stack Overflow用户
提问于 2018-08-19 03:58:15
回答 1查看 323关注 0票数 -1

所以我使用foreach中的glob()函数来渲染我站点上的文件夹中的图像,我想在里面有标题,所以我把标题放在图像的元数据中,但是当我通过exif_read_data()执行这些元数据时,它将不会以utf-8格式执行,它会显示POL‘T?XE而不是这个POLŠTáŘE。这是我的代码,试图解决这个问题

代码语言:javascript
复制
header("Content-Type: text/html; charset=utf-8");
ini_set('exif.encode_unicode', 'UTF-8');
iconv_set_encoding('input_encoding', 'UTF-8');
iconv_set_encoding('output_encoding', 'UTF-8');
iconv_set_encoding('internal_encoding', 'UTF-8');

$dirs = array_filter(glob('img/*'), 'is_dir');
foreach ($dirs as $dir) {
  $files = glob($dir.'/*.{jpg,png,JPG,PNG,jpeg,JPEG}', GLOB_BRACE);
  foreach($files as $file) {
    $meta_data = exif_read_data($file, 0, true);
    echo '
    <img src="'.$file.'" title="'.$meta_data['IFD0']['Title'].'" />
    ';
  }
}

所有这些都不起作用,即使我使用exiftools。即使是使用utf8_encode()也不能使用mb_convert_encoding($meta_data['IFD0']['Title'], 'UTF-8')。当我使用这个mb_detect_encoding()函数时,它会执行UTF-8。

我尝试使用exiftool将编码设置为utf-8,但也不起作用。你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-19 07:42:49

经过几个小时的字面上寻找答案,没有找到任何东西(没有为我工作),我想像这样:我把整个正常字母表和特殊字符字母表到该图片的元数据,然后我输出它与$meta_data['IFD0']['Title']bin2hex()函数,并使和array为每个字母和特殊字母,然后用str_replace替换代码与正常字符。

代码语言:javascript
复制
$hex = array('0000','6100','6200','6300','6400','6500','6600','6700','6800','6900','6a00','6b00','6c00','6d00','6e00','6f00','7000','7100','7200','7300','7400','7500','7600','7700','7800','7900','7a00','4100','4200','4300','4400','4500','4600','4700','4800','4900','4a00','4b00','4c00','4d00','4e00','4f00','5000','5100','5200','5300','5400','5500','5600','5700','5800','5900','5a00','e100','0d01','0f01','e900','1b01','ed00','4801','f300','5901','6101','6501','fa00','6f01','fd00','7e01','c100','0c01','0e01','c900','1a01','cd00','4701','d300','5801','6001','6401','da00','6e01','dd00','7d01','2c00', '2000','3100','3200','3300','3400','3500','3600','3700','3800','3900','3000','2d00','2100','2b00');

$letters = array('', 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','á','č','ď','é','ě','í','ň','ó','ř','š','ť','ú','ů','ý','ž','Á','Č','Ď','É','Ě','Í','Ň','Ó','Ř','Š','Ť','Ú','Ů','Ý','Ž', ',', ' ','1','2','3','4','5','6','7','8','9','0','-','!','+');

然后

代码语言:javascript
复制
str_replace($hex, $letters, bin2hex($meta_data['IFD0']['Title']))

之前的输出:aY45Y5~1a534Y68Y

输出后:šěř45čř5ž1š53čě4ř6ě8ř (与元数据相同)

注意:即使在$letters示例中,每个字符也必须与$hex中的字符位于相同的位置:

代码语言:javascript
复制
$letters = array('a', 'b', 'c', 'd');
$hex = array('6100','6200','6300','6400'); //'a', 'b', 'c', 'd'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51912113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档