2012-07-26 81 views
3

所以我有一堆網址,其中一些對他們有中國文字是這樣的: http://www.abcdefg.com/ad2/zh/profile/2169358/1/冰綠茶/編碼在PHP的網址中國文字

不過,我需要處理所有這些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但沒有工作。

任何幫助將不勝感激!

注意:編碼的網址意味着不會被瀏覽器顯示,所以更改標題不是一個選項。

+0

對不起,我不清楚。編碼的URL不用於瀏覽器顯示,因此更改標題將不起作用。 – Draco 2012-07-26 03:30:56

+0

你能展示你的代碼的例子嗎?從原始URL來自哪裏並不清楚。 – 2012-07-26 03:47:24

+0

原來的網址存儲在文件中,所以我沒有太多的展示。 我只想處理它們並存儲編碼的URL。 – Draco 2012-07-26 04:00:16

回答

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首先在對URL進行編碼之前進行編碼。

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

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

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

所以我也試過這種方法,但urlecode也編碼'/',這不是我想要的。 – Draco 2012-07-26 03:58:13

+0

向'url_parse()','爆炸()'路徑首先添加另一個步驟。 – uzyn 2012-07-26 04:03:45

+0

感謝作品的魅力! – Draco 2012-07-26 05:10:24