【问题标题】:How to encode URL using php like browsers do如何像浏览器一样使用 php 对 URL 进行编码
【发布时间】:2011-07-23 10:28:30
【问题描述】:

我有这样的网址

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 包装器将文件从其他服务器下载到您的服务器吗? php.net/manual/en/wrappers.php - 你如何获得 URL?
  • 编码的 ULR 是从 FF 的地址栏复制而来的。由于隐私,我确实更改了它的主机名。我想复制文件使用:copy('http://www.example.com/Data/image/office-d%C3%B4n-s%C3%AC-%C3%A0.jpg', 'destination.jpg');
  • 如果您确定只有最后一段(文件名)将包含特殊字符,您可以使用 Russel 的解决方案。

标签: php url browser urlencode


【解决方案1】:

因此,这里的其他答案似乎在很大程度上忽略了您的帖子。希望我没有这样做。

在我看来,您只想对基本名称进行编码?如果这是真的,这个 ad-hoc 函数应该可以解决问题:

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

【讨论】:

  • 函数 encode_basename($url) { $url = explode('/', $url); $base = array_pop($url);返回 implode('/', $url) 。 '/' 。 rawurlencode($base); }
  • 不应将此答案标记为已接受,因为它不能解决问题。正如其他人指出的那样,您不能使用urlencode(),而是使用rawurlencode()
猜你喜欢
  • 2013-03-03
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 2017-05-12
相关资源
最近更新 更多