sprintf警告 - 编码问题

时间:2010-10-02 18:44:19

标签: php encoding printf

我正在使用以下代码查找用户的所有属性,然后删除它们。我的问题是我收到了警告:警告:sprintf():每个属性的参数太少

但是,当我手动输入删除字符串的 $ user_id first_last %% 40ourwiki.com 时,它可以正常工作!

似乎sprintf需要双倍'%'但不确定原因。有办法解决这个问题吗?另外,我正在为file_get_contents使用相同的变量,这样可以正常工作。

守则:

$user="first_last@ourwiki.com";
$user_id=str_replace(array('@', '#'), array('%40', '%23'), $user);
print $user_id;

$url=("http://admin:password@172.16.214.133/@api/users/=$user_id/properties");
$xmlString=file_get_contents($url);

$delete = "http://admin:password@172.16.214.133/@api/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);
    curl_setopt($ch,CURLOPT_USERPWD,"$username:$password");
    return  curl_exec($ch);
}

foreach($xml->property as $property) {
  $name = $property['name'];
  $name2=str_replace(array('@', '#'), array('%40', '%23'), $name);
  print $name2;
  curl_fetch(sprintf($delete, $name2),'admin','password');
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

%sprintf()中的特殊字符。因此,您必须在处理之前撤消所有%%%是文字%s

$delete = str_replace("http://admin:password@172.16.214.133/@api/users/=$user_id/properties/", '%', '%%').'%s';

您不必在此使用sprintf,也可以使用连接运算符,例如:

$delete = "http://admin:password@172.16.214.133/@api/users/=$user_id/properties/";
curl_fetch( $delete . $name2, 'admin', 'password' );