2014-02-18 148 views
0

一個非常簡單的問題,在這裏可能已經解決了很多時間,但我沒有得到我想要的。如何將此網址轉換爲%20?

我有一個形象的網址是這樣的:

$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg'; 

,並希望輸出以這種形式

http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg 

是ofcourse你會告訴我,我可以使用進行urlencode或rawurlencode。相信我,我已經嘗試過,仍然沒有運氣。

用urlencode我得到這樣

http%3A%2F%2Fperfumepalace.arctechsolution.com%2Fimage%2Fcache%2Fdata%2Fanother%2FFor+Her%2FBelieve+100ml+EDP-150x150.jpg 

而且隨着rawurlencode我收到這樣的輸出:

http%3A%2F%2Fperfumepalace.arctechsolution.com%2Fimage%2Fcache%2Fdata%2Fanother%2FFor%20Her%2FBelieve%20100ml%20EDP-150x150.jpg 

隨着str_replace我能得到什麼我想是這樣的:

str_replace('+', '%20', $image); 

將導致:http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg

但我想讓他們使用urlencode或rawurlencode。但是這些函數甚至可以編碼斜線/部分。

有沒有什麼辦法可以只對url中的空格進行url編碼?

編輯:是的,我可以使用basename()或pathinfo來只編碼部分網址。但是,目錄名稱也可能包含空格字符,因此僅轉換文件名在這裏也是不可能的。

實際上我想知道我們是否可以在不影響fullurl的'/'的情況下使用urlencode或rawurlencode。我不希望正則表達式的建議更高。

注意:併發症部分是URL路徑中'她的'目錄部分,目錄的級別也不固定。

+0

@Rikesh我希望你能在回答之前閱讀整篇文章。 –

+0

「str_replace」有什麼問題?爲什麼你不想使用它? – Bilal

+0

但是,爲什麼只需要空格進行編碼? –

回答

3

你需要的是rawurlencode(),但只編碼你的url的必要部分。

例子:

$image = sprintf(
    'http://perfumepalace.arctechsolution.com/image/cache/data/another/%s/%s', 
    rawurlencode('For Her'), 
    rawurlencode('Believe 100ml EDP-150x150.jpg') 
); 

但是,如果你仍然想應用到整個URL字符串,你可以做象下面這樣:編碼字符串時要

function my_url_encode($url) { 
    $info = parse_url($url); 
    return sprintf('%s://%s/%s', 
        $info['scheme'], 
        $info['host'], 
        implode('/', array_map('rawurlencode', explode('/', $info['path'])))); 
} 
+0

我沒有提到rawurlencode的問題。在回覆之前請閱讀完整的文章。你提到了 –

+0

。 '但我想讓他們使用urlencode或rawurlencode'。我認爲這個答案應該可以解決你的問題。你只需要編碼必要的部分。 'rawurlencode'將不會爲你處理這個部分。 – anurupr

+0

@Yegya查看示例。 – xdazz

1

UrlEncode只應該用於用於查詢網址。

所以我在這裏的建議是你要保留str_replace('+', '%20', $image);代碼,因爲你有完整的URL而不僅僅是查詢部分。

另一種選擇是解析URL,解壓路徑,對其進行編碼和重建的URL,這裏是一個例子:

$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg' 

$path = parse_url($image, PHP_URL_PATH);//extract the path 
$epath = rawurlencode($path);//encode it 
$enc_image = 'http://perfumepalace.arctechsolution.com/'.$epath;//build the new url 
+0

是的,我們可以使用它,但我不想str_replace。它是我客戶的要求。 –

+0

@Yegya我用一個不同的解決方案更新了我的答案,沒有測試過,但應該可以工作 – fmodos

+1

我認爲你的修改後的解決方案將在路徑中包含'/'字符。沒有bueno。 –

1

試試這個:

$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg'; 
$parts = parse_url($image); 
$image_path = explode('/',$parts['path']); 
foreach($image_path as $key => $image_path_part){ 
$image_path[$key] = rawurlencode($image_path_part); 
} 
echo $parts['scheme']."://".$parts['host'].implode('/',$image_path); 

輸出http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg

祝您有美好的一天!

+0

簡單又好看的方法。 +1。感謝名單。 @ xdazz的解決方案雖然不錯。 –

+0

我現在檢查了他的解決方案。除了'image'文件夾之外還有一個額外的'/',這很好。所以請在使用前刪除它。 –