如何获取名称中包含iso-8859-2字符的远程映像?

时间:2012-12-25 22:48:42

标签: php image curl

我正在使用PHP中的cURL从远程服务器保存和调整大量图像,但之前的开发人员没有实现任何类型的系统,使用户上传的图片“安全”,因此用户可以上传任何类型的文件格式与任何类型的名称,然后上传的文件名称保存到数据库,因此许多文件具有非URL安全和iso-8859-8字符。例如:

gaght101125659_5 Gn-eŐs mtó gÁrlós.jpg

根据this answer,我制作了获取图片的代码。

private function getRemoteUrl($file)
{
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $file);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

$img = imagecreatefromstring($this->getRemoteUrl($url));//$url contains the plain url of the image.

此代码适用于名称为gaht123115516_2.jpg的图像,但对于上面显示的示例,它会出错:

Warning: imagecreatefromstring() [function.imagecreatefromstring]: Data is not in a recognized format in /home/test/public_html/resizing.php on line 64

当然,因为花哨的人物。那么我应该在getRemoteUrl($file)中使用$file变量来使其工作?这可以用PHP完成吗?如果没有,我应该尝试其他方法/编程语言?

2 个答案:

答案 0 :(得分:1)

URL encode指定的文件名。

答案 1 :(得分:1)

在文件名上使用urlencode()。不要urlencode()整个网址。