PHP sprintf escapando%

Quiero la siguiente salida: -

A punto de descontar el 50% de 27.59 € de tu 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 el % in 50% también para reemplazo. ¿Cómo escapo de ella?

preguntado el 08 de septiembre de 10 a las 07:09

@Columna. Shrapnel Mi pregunta es sobre vsprintf not printf, estoy usando esto por primera vez y no puedo asumir la similitud entre los dos. Sin embargo, buscando escape or escaping en ambos php.net/printf y php.net/vsprintf ambos no muestran la respuesta de inmediato. Cuando busco %% muestra la respuesta en php.net/printf pero no conocía %%!!! ¿Buscó la respuesta allí antes de votar en contra? -

@sandeepan: vsprintf pertenece a la misma familia de funciones que printf. Sin embargo, la documentación correcta para encontrar el formato es php.net/sprintf. Ambas páginas incluso lo señalan: "Consulte sprintf () para obtener una descripción del formato". ¿No hiciste al menos clic en él? -

@Columna. Metralla está bien, tomemos php.net/sprintf, ¿dónde está la respuesta? Está en la mitad de la página. With printf() and sprintf() functions, escape character is not backslash '\' but rather '%'. ¿Qué hay para rechazar aquí? No fue tan obvio para mí como lo fue para ti. Si encuentra una pregunta duplicada, puede escribir mejor el enlace. Pero estoy seguro de que muchos encontrarán útil esta pregunta. Pero no lo aceptará y todavía dirá algo, lo sé. -

oh, pensé que el segundo comentario era del coronel Shrapnel, lo siento -

SO debería tener una bandera para las respuestas RTFM. Es casi como si la gente hiciera un troll para poder decirle a la gente que lea los documentos. Necesitaba ayuda e hizo una pregunta y luego alguien respondió amablemente y obtuvo puntos por ello. El mundo continuó y se utilizó Internet en beneficio de alguien. Mientras tanto, me acaloro por una discusión de dos años. -

4 Respuestas

Escapa con otro %:

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

Respondido el 08 de Septiembre de 10 a las 11:09

sprintf ("SELECCIONAR * DESDE ... DONDE nombre LIKE '%%% s %%% s %%'", $ fname, $ lname); - ¡Feo pero funciona! - Jan Hettich

puedes agregar esa parte con otro "% s": sprintf ('de% s puedes obtener% s', 'algo', '50% ') - Lukas Liesis

¿Cómo se escapa si la cadena es dinámica? Digamos, sprintf('This is %s.', the_title()) - Budji

@madastro str_replace('%', '%%', the_title()) - ivanka todorova

Es muy fácil.

Pon otro % delante del original % para escapar de ella.

Por ejemplo,

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

Salida:

%d of 23 = 23

Respondido 03 Jul 17, 00:07

¿Qué pasa con 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);

Simplemente agregue su signo de porcentaje en su matriz de variables

Respondido 01 Oct 17, 15:10

La pregunta era cómo hacer sprintf escapando%. - fatalista

Esto funciona para mi:

sprintf(
    '%s (Cash Discount: %%%s, Deferred Discount: %%%s)',
    $segment->name,
    $segment->discount_cash,
    $segment->discount_deferred,
)

// Gold (Cash Discount: %25, Deferred Discount: %20)

Respondido el 08 de diciembre de 20 a las 14:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.