PHP sprintf in fuga%


184

Voglio il seguente output: -

Sto per detrarre il 50% di € 27,59 dal tuo account di ricarica.

quando faccio qualcosa del genere: -

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

Ma mi dà questo errore vsprintf() [function.vsprintf]: Too few arguments in ...perché considera l' %in 50%anche per la sostituzione. Come posso evitarlo?


1
@Col. Shrapnel La mia domanda riguarda vsprintf non printf, lo sto usando per la prima volta e non potevo assumere la somiglianza tra i due. Tuttavia, la ricerca escapeo escapingin entrambi php.net/printfed php.net/vsprintfentrambi non mostra immediatamente la risposta. Quando lo cerco %%mostra la risposta in php.net/printf ma non lo sapevo %%!!! Hai cercato la risposta lì prima di effettuare il downgrade?
Sandeepan Nath,

@sandeepan: vsprintfappartiene alla stessa famiglia di funzioni di printf. La documentazione corretta per trovare il formato, tuttavia, è php.net/sprintf . Entrambe le pagine indicano anche: "Vedi sprintf () per una descrizione del formato." Non l'hai almeno cliccato?
BoltClock

5
@Col. Shrapnel ok bene prendiamo php.net/sprintf, dov'è la risposta? È a metà pagina. With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'.Cosa c'è da votare qui? Non era così ovvio per me come lo era per te. Se trovi una domanda duplicata, puoi scrivere meglio il link. Ma sono sicuro che molti troveranno utile questa domanda. Ma non lo accetti e continuerai a dire qualcosa, lo so.
Sandeepan Nath,

oh, pensavo che il secondo commento fosse del Col. Shrapnel, scusa
Sandeepan Nath,

3
SO dovrebbe avere un flag per le risposte RTFM. È quasi come se la gente troll solo per poter dire alla gente di leggere i documenti. Aveva bisogno di aiuto e fece una domanda, poi qualcuno rispose utile e ottenne dei punti. Il mondo è andato avanti e Internet è stato usato a beneficio di qualcuno. Nel frattempo mi sto scaldando per una discussione di due anni.
rob5408,

Risposte:


344

Scappa con un altro %:

$stringWithVariables = 'About to deduct 50%% of %s %s from your Top-Up account.';

22
sprintf ("SELEZIONA * DA ... DOVE Nome MI PIACE '%%% s %%% s %%'", $ fname, $ lname); - Brutto ma funziona!
Jan Hettich,

1
Questo vale anche per Ruby
Jamie Cook, il

puoi aggiungere quella parte con un'altra "% s": sprintf ('da% s puoi ottenere% s', 'qualcosa', '50% ')
Lukas Liesis

Come sfuggire se la stringa è dinamica? Diciamo,sprintf('This is %s.', the_title())
budji,

7
@madastrostr_replace('%', '%%', the_title())
Ivanka Todorova,

3

È molto facile.

Metti un altro %davanti all'originale %per sfuggire.

Per esempio,

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

Produzione:

%d of 23 = 23

1

Che dire di questo:

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

Aggiungi il tuo segno di percentuale nel tuo array di variabili

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.