2012-08-23 41 views
8

我需要在其中一個API中進行處理的編碼URL。 但是,它需要全編碼的URL在php中編碼包含連字符( - )和點(。)的url

對於如:

網址已從

http://test.site-raj.co/999999?lpp=1&px2=IjN 

到編碼的網址,如下所示

http%3a%2f%test%site%2draj%2eco%2f999999%3flpp%3d1%26px2%3dIjN 

我需要每隔一個符號進行編碼偶數點( 。)和連字符( - )像上面一樣。請讓我知道任何函數在PHP /代碼來做到這一點。

謝謝。

+0

你舉的例子中有 –

+1

那麼什麼沒有連字符? @MikeB – 11684

+3

@ 11684我們需要知道他希望將連字符翻譯成什麼。與點類似......他只是用預期輸出中的百分號替換它們。 –

回答

14

試試這個。在函數裏,也許,如果你正在使用它不止一次......

$str = 'http://test.site.co/999999?lpp=1&p---x2=IjN'; 
$str = urlencode($str); 
$str = str_replace('.', '%2E', $str); 
$str = str_replace('-', '%2D', $str); 
echo $str; 
+0

雅它可能是好的,但如果存在任何其他特殊字符也意味着如何做到這一點? –

8

這將編碼爲不是純字母或數字的所有字符。你仍然可以用標準urldecode或rawurldecode解碼此:

function urlencodeall($x) { 
    $out = ''; 
    for ($i = 0; isset($x[$i]); $i++) { 
     $c = $x[$i]; 
     if (!ctype_alnum($c)) $c = '%' . sprintf('%02X', ord($c)); 
     $out .= $c; 
    } 
    return $out; 
} 
-3

你爲什麼不使用rawurlencode

例如rawurlencode("http://test.site-raj.co/999999?lpp=1&px2=IjN")

+3

http://www.php.net/rawurlencode says返回一個字符串,其中所有非字母數字字符('-_。〜'除外)已被替換爲百分號(%)後跟兩個十六進制數字。這不是OP要求的。 –