Предупреждение sprintf - проблема с кодировкой

Я использую следующий код, чтобы найти все свойства для пользователя и, в свою очередь, удалить их. Моя проблема в том, что я получаю предупреждение: Предупреждение: sprintf(): Слишком мало аргументов для каждого из свойств.

Однако, когда я вручную ввожу $user_id для строки удаления как first_last%%40ourwiki.com, все работает!

Похоже, что sprintf требует двойного «%», но не уверен, почему. Есть ли способ обойти это? Кроме того, я использую ту же переменную для file_get_contents, и это работает нормально.

Код:

$user="[email protected]";
$user_id=str_replace(array('@', '#'), array('%40', '%23'), $user);
print $user_id;

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

$delete = "http://admin:[email protected]/@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');
}

Заранее спасибо!


person Aaron    schedule 02.10.2010    source источник


Ответы (1)


% — это специальный символ в sprintf(). Таким образом, вы должны экранировать все % перед его обработкой, %% — это буквальное %s.

$delete = str_replace("http://admin:[email protected]/@api/users/=$user_id/properties/", '%', '%%').'%s';

Вам не обязательно использовать здесь sprintf, вы также можете использовать оператор конкатенации, например:

$delete = "http://admin:[email protected]/@api/users/=$user_id/properties/";
curl_fetch( $delete . $name2, 'admin', 'password' );
person Lekensteyn    schedule 02.10.2010