如何使用php编码URL,就像浏览器一样

9
我有一个像这样的URL
http://www.example.com/Data/image/office-dôn-sì-à.jpg

我希望使用php中的copy函数将该文件复制到我的服务器上。因此,第一件事是将其编码为以下内容(我认为浏览器也会这样做)

http://www.example.com/Data/image/office-d%C3%B4n-s%C3%AC-%C3%A0.jpg

但如果我使用函数urlencode,整个URL都会被编码为

http%3A%2F%2Fwww.example.com%2FData%2Fimage%2Foffice-d%C3%B4n-s%C3%AC-%C3%A0.jpg

现在它不再是一个URL,也不是我想要的。

需要帮忙吗?


你想使用HTTP包装器从另一个服务器下载文件到你的服务器吗?http://php.net/manual/en/wrappers.php - 你如何获取URL? - vbence
编码后的URL从FF地址栏中复制。由于隐私问题,我更改了其主机名。我想使用以下方式复制文件:copy('http://www.example.com/Data/image/office-d%C3%B4n-s%C3%AC-%C3%A0.jpg', 'destination.jpg'); - user342960
如果您确定只有最后一部分(文件名)包含特殊字符,那么您可以使用Russel的解决方案。 - vbence
1个回答

9

所以,其他的回答似乎大多忽略了你的帖子。希望我没有做同样的事情。

在我看来,您只想编码基本名称?如果是这样,这个临时函数应该可以解决问题:

function encode_basename($url) {
    $url = explode('/', $url);
    $base = array_pop($url);

    return implode('/', $url) . '/' . urlencode($base);
}
//returns: http://www.example.com/Data/image/office-d%25C3%25B4n-s%25C3%25AC-%25C3%25A0.jpg

1
函数 encode_basename($url) { $url = explode('/', $url); $base = array_pop($url); return implode('/', $url) . '/' . rawurlencode($base); } - Shailesh Dwivedi
1
这个答案不能被标记为已接受,因为它没有解决问题。正如其他人指出的那样,你不能使用 urlencode(),而应该使用 rawurlencode() - Muntashir Akon
没有区别。这个仅基于basename的解决方案根本不是一个答案。而且在这种情况下,urlencode和rawurlencode是同样的问题。 - Khom Nazid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接