当url有空格时,file_get_contents为false(编码所有内容都不起作用)

时间:2016-07-28 14:17:31

标签: php file-get-contents urlencode

所以,问题在于这一行

$imageString = file_get_contents($image_url);

使用具有空格特征的网址并不起作用。但是如果我做了

$imageString = file_get_contents(urlencode($image_url));

什么都行不通。我一直在变量中收到假。

ulr属于那种:

https://s3-eu-central-1.amazonaws.com/images/12/Screenshot from 2016-04-28 18 15:54:20.png

3 个答案:

答案 0 :(得分:8)

使用此功能

function escapefile_url($url){
  $parts = parse_url($url);
  $path_parts = array_map('rawurldecode', explode('/', $parts['path']));

  return
    $parts['scheme'] . '://' .
    $parts['host'] .
    implode('/', array_map('rawurlencode', $path_parts))
  ;
}


echo escapefile_url("http://example.com/foo/bar bof/some file.jpg") . "\n";
echo escapefile_url("http://example.com/foo/bar+bof/some+file.jpg") . "\n";
echo escapefile_url("http://example.com/foo/bar%20bof/some%20file.jpg") . "\n";

答案 1 :(得分:0)

我也遇到了同样的问题,如果您进行搜索,就会看到所有人告诉您使用 urlencode(),但是没有! urlencode()在这种情况下不起作用...

我使用了 @Akram Wahid 答案,并且效果很好,因此我建议将其用于file_get_contents()。

如果您怀疑 @Akram Wahid 中的 escapefile_url()做了什么,请在此处回答一下:

他只是将网址分开作为数组,然后使用 rawurlencode()对所有包含特殊字符的部分进行编码,而没有像(http://example.com)这样的主域。

那又如何呢?!在此示例中,使用 urlencode() escapefile_url()对此进行了澄清

echo escapefile_url("http://example.com/foo/bar bof/some file.jpg") . "<br>";
// http://example.com/foo/bar%20bof/some%20file.jpg

echo urlencode("http://example.com/foo/bar bof/some file.jpg") . "<br>";
// http%3A%2F%2Fexample.com%2Ffoo%2Fbar+bof%2Fsome+file.jpg

答案 2 :(得分:0)

如果您想将@Akram Wahid 的解决方案应用于可能还包含 GET 参数的 URL,那么更新版本将是:

function escapefile_url($url){
  $parts = parse_url($url);
  $path_parts = array_map('rawurldecode', explode('/', $parts['path']));

  return
    $parts['scheme'] . '://' .
    $parts['host'] .
    implode('/', array_map('rawurlencode', $path_parts)) .
    (isset($parts['query']) ? '?'.rawurldecode($parts['query']) : '')
  ;
}