getimagesize 不适用于包含拉丁语/特殊字符的图像


getimagesize does not work with images that contain latin/special chars

当我尝试像这样获取图像大小时

$size=getimagesize(realpath('http://www.index.hr/images2/ivandžaferovic-fejs.jpg'));

它说:

警告: getimagesize(http://www.index.hr/images2/ivandžaferovic-fejs.jpg) [function.getimagesize]:无法打开流:HTTP 请求失败! HTTP/1.0 400 错误请求 测试.php在第 4 行 -布尔(假)

这是因为图片中的"ž"字符。 没有它,函数确实有效。怎么办

如果你对文件名进行编码,它就可以工作:

$size = getimagesize('http://www.index.hr/images2/'.urlencode('ivandžaferovic-fejs.jpg'));
print_r($size);

带有路径信息的更多动态示例:

$url = pathinfo('http://www.index.hr/images2/ivandžaferovic-fejs.jpg');
$size = getimagesize($url['dirname'].'/'.urlencode($url['basename']));
print_r($size);

另一个parse_url的例子:

$urlArray = parse_url('http://www.portal.com/ResourceManager/GetImage.aspx?imgId=619389&fmtId=99');
$url = ($urlArray['scheme'].'://'.$urlArray['host'].str_replace('%2F', '/', urlencode($urlArray['path'])));
$url .= isset($urlArray['query']) ? '?'.$urlArray['query'] : '';
$size = getimagesize($url);
print_r($size);

在大多数情况下,它应该有效。必须给出方案(http,https等),否则parse_url将不包含host,而仅包含path数组键。因此,要构建一个通用且完美的解决方案,您必须花费更多时间(编写更多代码)来解析 url。