使用PHP编码路径的一部分

时间:2010-09-23 15:20:44

标签: php url curl

我只需要编码$ delete路径的一部分。只有电子邮件地址中的@和属性中的#。我知道如何使用urlencode来完成整个过程,但不仅仅是这样。它的工作方式是循环获取属性,其中大部分包含名称中的#。任何能够帮助修改以使其有效的人都将非常感激!

删除:

 $delete = "http://admin:12345@192.168.245.133/@api/deki/DELETE:users/$user_id/properties/%s";
  1. 您可以在此处看到 $ user_id 这将是一个电子邮件地址,但需要对@符号进行编码。
  2. 最后跟随的属性在名称中有一个#,这也需要进行编码。例如,一个属性名称​​ userprofile#external.created_date
  3. 以下是目前的代码:

     <?php
    
        $user_id="john_smith@ourwiki.com";
    
        $url=('http://admin:12345@192.168.245.133/@api/deki/users/=john_smith@ourwiki.com/properties');
        $xmlString=file_get_contents($url);
    
        $delete = "http://admin:12345@192.168.245.133/@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');
        }
    
        ?>
    

1 个答案:

答案 0 :(得分:0)

你试过这个吗? str_replace($ string,array('@','#'),array('%40','%23'));

urlencode函数不允许您将其限制为字符子集。