看起来 fopen 无法打开带空格的文件。例如:
$url = 'http://gatewaypeople.com/images/articles/cntrbutnssttmnts12_main 616x200.jpg';
fopen($url, 'r');
Run Code Online (Sandbox Code Playgroud)
返回 false(注意 url 中的空格),但浏览器可以访问文件。我也试图逃跑的网址urlencode,并rawurlencode没有运气。如何正确地逃避空间?
您可以使用此代码:
$arr = parse_url ( 'http://gatewaypeople.com/images/articles/cntrbutnssttmnts12_main 616x200.jpg' );
$parts = explode ( '/', $arr['path'] );
$fname = $parts[count($parts)-1];
unset($parts[count($parts)-1]);
$url = $arr['scheme'] . '://' . $arr['host'] . join('/', $parts) . '/' . urlencode ( $fname );
var_dump( $url );
Run Code Online (Sandbox Code Playgroud)
替代和更短的答案(感谢@Dziamid)
$url = 'http://gatewaypeople.com/images/articles/cntrbutnssttmnts12_main 616x200.jpg';
$parts = pathinfo($url);
$url = $parts['dirname'] . '/' . urlencode($parts['basename']);
var_dump( $url );
Run Code Online (Sandbox Code Playgroud)
输出:
string(76) "http://gatewaypeople.com/images/articles/cntrbutnssttmnts12_main+616x200.jpg"
Run Code Online (Sandbox Code Playgroud)