3

所以我有一堆网址,其中一些有中文字符,如下所示: http://www.abcdefg.com/ad2/zh/profile/2169358/1/冰绿茶/

但是,我需要处理所有这些 url,并将带有中文字符的 url 编码成如下内容: http://www.abcdefg.com/ad2/zh/profile/2169358/1/%E4%BA%8C%E4%B8%8D%E4%BA%8C%E7%9A%84%E4%BA%8C/

所以中文部分必须用php编码。

我尝试使用urlencoderawurlencode但没有奏效。

任何帮助将不胜感激!

注意:编码的 url 是为了存储而不是由浏览器显示,因此更改标题不是一种选择。

4

1 回答 1

2

对于这种情况,您可能希望使用parse_url()来分隔 URL 组件并且仅urlencode()使用pathquery组件。

$url = 'http://www.abcdefg.com/ad2/zh/profile/2169358/1/冰绿茶/';
$parsed = parse_url($url);

print_r($parsed);

你会得到

Array
(
    [scheme] => http
    [host] => www.abcdefg.com
    [path] => /ad2/zh/profile/2169358/1/冰绿茶
)

所以,urlencode() pathquery(如果有的话)。

一旦这些是 URL 编码的,您将需要重新组合以使scheme(http)、host(www.abcdefg.com) 不受影响。

如果你还是喜欢/原封不动explode()的,path先在 URLencoding 之前吧。

$pathComponents = explode('/', $parsed['path']);

$pathComponents = array_map('urlencode', $pathComponents);

// Assemble back $path
$path = implode('/', $pathComponents);
于 2012-07-26T03:43:22.960 回答