在php中为url编码中文字符

时间:2012-07-26 03:21:57

标签: php encoding utf-8 decoding

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

但是我需要处理所有这些网址并将带有中文字符的网址编码为以下内容: 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但没有效果。

非常感谢任何帮助!

注意:编码的网址应该存储而不是浏览器显示,因此不能选择更改标题。

1 个答案:

答案 0 :(得分:2)

对于这种情况,您可能希望使用parse_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(如果有的话)。

一旦进行了网址编码,您需要重新组合,以便scheme(http),host(www.abcdefg.com)不受影响。

如果您仍然希望保留/完整,explode() path,请先对其进行网址编码。

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

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

// Assemble back $path
$path = implode('/', $pathComponents);