文件名中的特殊字符导致问题

时间:2015-02-07 20:02:32

标签: php

$imageURL = 'http://www.cnsnews.com/sites/default/files/images/OBAMA-AP%20PHOTO_8.jpg';

$imageInfo = pathinfo($imageURL);
$imageName = clean(basename($imageURL,'.'.$imageInfo['extension']));
$fileName =  $imageName.'.'.$imageInfo['extension'];// file name

$content = file_get_contents($imageURL);

file_put_contents(UPLOAD_DIR.$fileName, $content);   
$product_file = UPLOAD_DIR.$fileName;


function clean($string) {
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
   $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.

   return preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
}

..虽然几乎所有我尝试过的网址除了这个之外都可以正常工作,可能是因为OBAMA-AP%20PHOTO_8.jpg中的特殊字符?即使我正在打扫它?

图片无法下载。

2 个答案:

答案 0 :(得分:0)

(编辑我以前的答案,这不是很有帮助)

对问题进行分类 - file_get_contents($imageURL)是否返回数据? 打印要测试的返回字符串的长度echo strlen($contents);

你能创建一个文件名中包含'%'的文件吗?

我可以将imageURL下载为打字,所以你很可能是正确的,它是 保存到文件名中的%将成为问题。

答案 1 :(得分:0)

在清理图像名称之前,您应该对其进行urldecode:

function clean($string) {
   $string = urldecode($string);
   $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
   $string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.

   return preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
}