getimagesize не работает с изображениями, которые содержат латинские / специальные символы

Когда я пытаюсь получить размер изображения, как это

$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 Плохой запрос в test.php в строке 4 -bool (false)

Это из-за символа «ž» внутри изображения. без него функции работают. Что с этим делать

Он работает, если вы urlencode имя файла:

 $size = getimagesize('http://img.ruphp.com/php/'.urlencode('ivand&')); print_r($size); 

Более динамический пример с pathinfo :

 $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); 

Он должен работать в большинстве случаев. Необходимо parse_url схему (http, https и т. Д.), Иначе parse_url не будет включать host а только ключ массива path . Поэтому для создания общего и безупречного решения вам придется потратить больше времени (написать больше кода) на разбор URL.