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?


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.';

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.