2010-09-23 81 views
1

我只需要編碼部分$ delete路徑。只有電子郵件地址中的@和屬性中的#。我知道如何將urlencode用於整個事情,但不是那樣。它的工作方式是通過循環來獲取屬性,其中大部分都包含名稱中的#號。任何人可以幫助修改,以便這個作品將不勝感激!使用PHP編碼部分路徑使用PHP

的刪除:

$delete = "http://admin:[email protected]/@api/deki/DELETE:users/$user_id/properties/%s"; 
  1. 在這裏你可以看到$ USER_ID這將是一個電子郵件地址,但@符號需要進行編碼。
  2. 最後的屬性在名稱中有一個#,這也需要編碼。例如,一個屬性名稱USERPROFILE#external.created_date

這是迄今爲止代碼:

<?php 

    $user_id="[email protected]"; 

    $url=('http://admin:[email protected]/@api/deki/users/[email protected]/properties'); 
    $xmlString=file_get_contents($url); 

    $delete = "http://admin:[email protected]/@api/deki/DELETE:users/$user_id/properties/%s"; 
    $xml = new SimpleXMLElement($xmlString); 

    function curl_fetch($url,$username,$password,$method='DELETE') 
    { 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // returns output as a string instead of echoing it 
     curl_setopt($ch,CURLOPT_USERPWD,"$username:$password"); // if your server requires basic auth do this 
     return curl_exec($ch); 
    } 

    foreach($xml->property as $property) { 
     $name = $property['name']; // the name is stored in the attribute 
     curl_fetch(sprintf($delete, $name),'admin','12345'); 
    } 

    ?> 
+0

請剪下您的示例代碼,只針對您遇到的問題。我無法確定您想要轉義的數據或其使用位置。 – erisco 2010-09-23 15:58:02

+0

@erisco感謝您回覆此問題。我很抱歉沒有說清楚。我編輯了這篇文章,並試圖更好地記錄需要解決的問題。這一切都與現有的api有關。我有一個for循環,用於捕獲特定user_id的所有給定屬性。如果您有任何問題,請告訴我。 – Aaron 2010-09-23 19:48:53

回答

0

你試過嗎? str_replace($ string,array('@','#'),array('%40','%23'));

urlencode函數不允許您將其限制爲字符的子集。

+0

不,我沒有試過。我在代碼中的哪個位置可以做到這一點?並且它會在每個屬性中替換它嗎?謝謝你的幫助。 – Aaron 2010-09-24 11:11:30

+0

在任何你需要逃避這些角色的地方。所以$ user_id和每個哈希標籤都是。 – grmartin 2010-09-24 13:35:18

+0

好吧,這是有道理的。所以我只是用$ user_id替換$ string。對於該屬性,str_replace是否會進入for循環?我假設我只是在賦值後對$ name變量進行替換。讓我知道這聽起來是否正確。 – Aaron 2010-09-24 16:24:04