PHP Sprintf entkommt%

184

Ich möchte die folgende Ausgabe: -

Etwa 50% von 27,59 € von Ihrem Aufladekonto abziehen.

wenn ich so etwas mache: -

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

Aber es gibt mir diesen Fehler, vsprintf() [function.vsprintf]: Too few arguments in ...weil es das %In 50%auch als Ersatz betrachtet. Wie entkomme ich ihm?

Sandeepan Nath
quelle
1
@Col. Shrapnel Meine Frage bezieht sich auf vsprintf nicht printf, ich benutze dies zum ersten Mal und konnte die Ähnlichkeit zwischen den beiden nicht annehmen. Bei der Suche escapeoder escapingin beiden php.net/printfund php.net/vsprintfbeiden wird die Antwort jedoch nicht sofort angezeigt. Wenn ich danach suche %%, wird die Antwort in php.net/printf angezeigt, aber ich wusste nichts davon %%!!! Haben Sie dort vor dem Downvoting nach der Antwort gesucht?
Sandeepan Nath
@sandeepan: vsprintfgehört in die gleiche Funktionsfamilie wie printf. Die richtige Dokumentation, um das Format zu finden, ist jedoch php.net/sprintf . Beide Seiten weisen sogar darauf hin: "Eine Beschreibung des Formats finden Sie unter sprintf ()." Hast du nicht wenigstens darauf geklickt?
BoltClock
5
@Col. Shrapnel ok gut lass uns php.net/sprintf nehmen, wo ist die Antwort? Es ist auf halber Strecke. With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.Was gibt es hier zu tun? Es war für mich einfach nicht so offensichtlich wie für dich. Wenn Sie eine doppelte Frage finden, können Sie den Link besser schreiben. Aber ich bin sicher, dass viele diese Frage hilfreich finden werden. Aber du wirst das nicht akzeptieren und trotzdem etwas sagen, ich weiß.
Sandeepan Nath
Oh, ich dachte, der zweite Kommentar war von Col. Shrapnel, sorry
Sandeepan Nath
3
SO sollte ein Flag für RTFM-Antworten haben. Es ist fast so, als würden Leute trollen, nur damit sie den Leuten sagen können, sie sollen die Dokumente lesen. Er brauchte Hilfe und stellte eine Frage, und dann antwortete jemand hilfreich und bekam Punkte dafür. Die Welt ging weiter und das Internet wurde zum Nutzen von jemandem genutzt. In der Zwischenzeit werde ich über einen zwei Jahre alten Streit hitzig.
rob5408

Antworten:

343

Entkomme mit einem anderen %:

$stringWithVariables = 'About to deduct 50%% of %s %s from your Top-Up account.';
BoltClock
quelle
22
sprintf ("SELECT * FROM ... WHERE name LIKE '%%% s %%% s %%'", $ fname, $ lname); - Hässlich, aber es funktioniert!
Jan Hettich
1
Dies gilt auch für Ruby
Jamie Cook
Sie können diesen Teil mit einem anderen "% s" hinzufügen: sprintf ("von% s können Sie% s erhalten", "etwas", "50%")
Lukas Liesis
Wie entkommen Sie ihm, wenn die Zeichenfolge dynamisch ist? Sagen wir,sprintf('This is %s.', the_title())
Budji
7
@ Madastrostr_replace('%', '%%', the_title())
Ivanka Todorova
3

Es ist sehr leicht.

Stellen Sie einen anderen %vor das Original %, um ihm zu entkommen.

Beispielsweise,

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

Ausgabe:

%d of 23 = 23

quelle
1

Was ist damit:

$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);

Fügen Sie einfach Ihr Prozentzeichen in Ihr Variablenarray ein

Dreiundachtzig
quelle