2010-09-08 16 views
136

Quiero el siguiente resultado: -PHP sprintf escapar%

A punto de deducir el 50% de € 27.59 de su cuenta Top-Up.

cuando hago algo como esto: -

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

pero me da este error vsprintf() [function.vsprintf]: Too few arguments in ... porque considera que el % en 50% también para su sustitución. ¿Cómo escapo?

+1

@Col. Metralla Mi pregunta es sobre vsprintf no printf, estoy usando esto por primera vez y no podía asumir la similitud entre los dos. Sin embargo, la búsqueda de 'escape' o' escaping' en ambos 'php.net/printf' y' php.net/vsprintf' no muestra la respuesta inmediatamente. Cuando busco '%%' muestra la respuesta en php.net/printf pero no sabía sobre '%%' !!! ¿Buscó la respuesta allí antes de la votación negativa? –

+0

@sandeepan: 'vsprintf' pertenece a la misma familia de funciones que' printf'. La documentación correcta para encontrar el formato, sin embargo, es http://www.php.net/sprintf. Ambas páginas incluso lo señalan: "Ver sprintf() para una descripción del formato". ¿No hiciste clic al menos? – BoltClock

+5

@Col. Shrapnel bien, vamos a tomar php.net/sprintf, ¿dónde está la respuesta? Está a la mitad de la página 'Con las funciones printf() y sprintf(), el carácter de escape no es una barra inclinada invertida '\', sino '%'.' ¿Qué hay para desvirtuar aquí? Simplemente no era tan obvio para mí como lo era para ti. Si encuentra una pregunta duplicada, puede escribir mejor el enlace. Pero estoy seguro de que a muchos les resultará útil esta pregunta. Pero no aceptarás eso y aún dirás algo, lo sé. –

Respuesta

250

escapar de ella con otro %:

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

sprintf ("SELECT * FROM ... WHERE name LIKE '%%% s %%% s %%'", $ fname, $ lname); - ¡Feo pero funciona! –

+1

Esto también se aplica a Ruby –

+0

puede agregar esa parte con otro "% s": sprintf ('de% s puede obtener% s', 'algo', '50% ') –

0

Es muy fácil.

Ponga otro % delante del original % para escapar de él.

Por ejemplo,

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

Salida:

%d of 23 = 23 
0

Qué tal esto:

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

acaba de añadir su signo de porcentaje de la matriz de las variables