PHP sprintf ucieka%

184

Chcę następujące dane wyjściowe: -

O odliczenie 50% z 27,59 € z konta doładowania.

kiedy robię coś takiego: -

$variablesArray[0] = '€';
$variablesArray[1] = 27.59;
$stringWithVariables = 'About to deduct 50% of %s %s from your Top-Up account.';
echo vsprintf($stringWithVariables, $variablesArray);

Ale to daje mi ten błąd vsprintf() [function.vsprintf]: Too few arguments in ..., ponieważ uważa, że %in 50%również do wymiany. Jak mogę uciec?

Sandeepan Nath
źródło
1
@Przełęcz. Shrapnel Moje pytanie dotyczy vsprintf, a nie printf, używam tego po raz pierwszy i nie mogę założyć podobieństwa między nimi. Jednak wyszukiwanie escapelub escapingjedno php.net/printfi php.net/vsprintfdrugie nie pokazuje odpowiedzi natychmiast. Kiedy szukam %%, pokazuje odpowiedź na php.net/printf, ale nie wiedziałem o tym %%!!! Czy szukałeś odpowiedzi przed oddaniem głosu?
Sandeepan Nath,
@sandeepan: vsprintfnależy do tej samej rodziny funkcji co printf. Prawidłową dokumentacją do znalezienia formatu jest jednak php.net/sprintf . Obie strony nawet wskazują na to: „Zobacz sprintf (), aby uzyskać opis formatu.” Nie kliknąłeś go przynajmniej?
BoltClock
5
@Przełęcz. Shrapnel ok dobrze, weźmy php.net/sprintf, gdzie jest odpowiedź? Znajduje się w połowie strony With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.Co można tutaj głosować? To po prostu nie było dla mnie tak oczywiste jak dla ciebie. Jeśli znajdziesz duplikat pytania, możesz lepiej napisać link. Ale jestem pewien, że wielu uzna to pytanie za pomocne. Ale nie zaakceptujesz tego i nadal coś powiesz, wiem.
Sandeepan Nath,
oh Myślałem, że drugi komentarz był płk Shrapnel, przepraszam
Sandeepan Nath
3
SO powinien mieć flagę dla odpowiedzi RTFM. To prawie tak, jakby ludzie trollowali, żeby mogli powiedzieć ludziom, żeby czytali dokumenty. Potrzebował pomocy i zadał pytanie, a potem ktoś udzielił pomocnej odpowiedzi i otrzymał za to punkty. Świat trwał i internet był wykorzystywany na czyjąś korzyść. Tymczasem ogrzewa mnie dwuletni spór.
rob5408

Odpowiedzi:

344

Ucieknij z innym %:

$stringWithVariables = 'About to deduct 50%% of %s %s from your Top-Up account.';
BoltClock
źródło
22
sprintf („WYBIERZ * OD… GDZIE nazwa LIKE '%%% s %%% s %%'”, $ fname, $ lname); - Brzydkie, ale działa!
Jan Hettich,
1
Dotyczy to także Ruby
Jamie Cook
możesz dodać tę część z innym „% s”: sprintf („z% s możesz dostać% s”, „coś”, „50%”)
Lukas Liesis
Jak można go uniknąć, jeśli ciąg jest dynamiczny? Powiedzmy,sprintf('This is %s.', the_title())
budji
7
@madastrostr_replace('%', '%%', the_title())
Ivanka
3

To bardzo łatwe.

Umieść inny %przed oryginałem, %aby go uciec.

Na przykład,

$num=23;
printf("%%d of 23 = %d",$num);

Wynik:

%d of 23 = 23

źródło
1

A co z tym:

$variablesArray[0] = '%';
$variablesArray[1] = '€';
$variablesArray[2] = 27.59;
$stringWithVariables = 'About to deduct 50%s of %s %s from your Top-Up account.';
echo vsprintf($stringWithVariables, $variablesArray);

Wystarczy dodać znak procentu do tablicy zmiennych

Trzydzieści
źródło