所以,问题在于这一行
$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
答案 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']) : '')
;
}