如何为 fopen 转义 url

Dzi*_*mid 5 php fopen

看起来 fopen 无法打开带空格的文件。例如:

$url = 'http://gatewaypeople.com/images/articles/cntrbutnssttmnts12_main 616x200.jpg';
fopen($url, 'r'); 
Run Code Online (Sandbox Code Playgroud)

返回 false(注意 url 中的空格),但浏览器可以访问文件。我也试图逃跑的网址urlencode,并rawurlencode没有运气。如何正确地逃避空间?

anu*_*ava 5

您可以使用此代码:

$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)