Lección: printf() y sprintf()
Las funciones printf()
y sprintf()
son
herramientas esenciales en PHP para crear cadenas formateadas con
precisión, ya sea para mostrar números, alinear texto, o generar salidas
personalizadas. En esta lección, veremos cómo funcionan, sus
diferencias, y cómo usarlas con ejemplos prácticos.
Introducción
printf()
y sprintf()
permiten formatear
cadenas usando patrones de formato, que combinan texto
normal con marcadores (%
) para insertar valores. La
diferencia clave es:
printf()
: Imprime la cadena formateada directamente (salida al navegador).sprintf()
: Devuelve la cadena formateada para almacenarla o procesarla.
Ejemplo básico:
<?php
declare(strict_types=1);
$nombre = "Ana";
printf("Hola, %s!\n", $nombre); // Imprime: Hola, Ana!
$saludo = sprintf("Hola, %s!\n", $nombre); // Almacena: Hola, Ana!
echo $saludo;
?>
Nota: Usa declare(strict_types=1)
para evitar errores de tipo en los argumentos.
Sintaxis de los Patrones
Un patrón de formato sigue esta estructura:
%[alineación][ancho][.precisión]especificador
- Alineación:
-
para alinear a la izquierda (por defecto, derecha). - Ancho: Número mínimo de caracteres (rellena con espacios o ceros).
- Precisión: Para floats, número de decimales; para strings, máximo de caracteres; para enteros, mínimo de dígitos.
- Especificador: Define el tipo de dato:
b
: Binario (entero en base 2).c
: Carácter (ASCII desde un entero).d
: Decimal (entero en base 10).e
: Exponencial (notación científica).f
: Float (punto flotante).o
: Octal (entero en base 8).x
: Hexadecimal (minúsculas).X
: Hexadecimal (mayúsculas).s
: String (cadena).
Ejemplo de patrón:
<?php
printf("%-10s", "Hola"); // Imprime: Hola (10 caracteres, alineado a la izquierda)
?>
Otro ejemplo:
<?php
printf("Nombre: %-10s | Edad: %3d | Saldo: %.2f EUR\n", "Ana", 25, 1234.5);
// Imprime: Nombre: Ana | Edad: 25 | Saldo: 1234.50 EUR
En este ejemplo, %3d
indica un número entero con un ancho
mínimo de 3 caracteres, y %.2f
indica un número de punto
flotante con 2 decimales.
Opciones de Relleno
0
: Rellena con ceros en lugar de espacios.'x
: Usa el carácterx
para rellenar (por ejemplo,'*'
).
<?php
printf("%010d", 123); // Imprime: 0000000123
printf("%'*10d", 123); // Imprime: *******123
?>
Ejemplos Prácticos
Números de Punto Flotante
<?php
declare(strict_types=1);
$pi = M_PI;
printf("Pi con 2 decimales: %.2f\n", $pi); // Imprime: 3.14
printf("Pi con 5 decimales: %.5f\n", $pi); // Imprime: 3.14159
printf("Pi exponencial: %e\n", $pi); // Imprime: 3.141593e+00
?>
Nota: Usa constantes para formatos comunes:
<?php
const FORMATO_2DEC = "%.2f";
printf(FORMATO_2DEC . "\n", $pi);
?>
Enteros en Diferentes Bases
<?php
declare(strict_types=1);
$numero = 255;
printf("Decimal: %d\n", $numero); // Imprime: 255
printf("Binario: %b\n", $numero); // Imprime: 11111111
printf("Octal: %o\n", $numero); // Imprime: 377
printf("Hex (min): %x\n", $numero); // Imprime: ff
printf("Hex (may): %X\n", $numero); // Imprime: FF
?>
Nota: Usa (int)
para
datos de formularios:
<?php
$entrada = (int)$_POST["numero"] ?? 0;
printf("%d\n", $entrada);
?>
Caracteres ASCII
<?php
printf("ASCII 65: %c\n", 65); // Imprime: A
?>
Cadenas con Ancho y Precisión
<?php
declare(strict_types=1);
$texto = "PHP es un lenguaje poderoso";
printf("Original: %s\n", $texto); // Imprime: PHP es un lenguaje poderoso
printf("Primeros 10: %.10s\n", $texto); // Imprime: PHP es un
printf("Alineado derecha: %30s\n", $texto); // Imprime: PHP es un lenguaje poderoso
printf("Alineado izquierda: %-30s*\n", $texto); // Imprime: PHP es un lenguaje poderoso *
?>
Usa htmlspecialchars()
si muestras datos de usuarios para evitar XSS:
<?php
$texto = htmlspecialchars($texto, ENT_QUOTES, "UTF-8");
?>
Usando sprintf()
<?php
declare(strict_types=1);
$formateado = sprintf("El número %d en hex es %X", 100, 100);
echo $formateado . "\n"; // Imprime: El número 100 en hex es 64
?>
Rendimiento y Comparación con echo y print
printf()
y sprintf()
son más lentos que
echo
y print
para salidas simples, ya que
procesan patrones de formato. Usa echo
o print
para texto sin formato:
<?php
declare(strict_types=1);
echo "Hola", " ", "mundo", "!\n"; // Más rápido, acepta múltiples argumentos
print "Hola mundo!\n"; // Ligeramente más lento, un solo argumento
// print "Hola", "mundo"; // Error: solo un argumento
?>
Nota: echo
es ideal para salidas
rápidas. print
devuelve 1
, útil en
expresiones.
Usa .
para concatenar con echo
o print
.
Seguridad
- Datos de usuarios: Sanitiza entradas con
filter_input()
o(string)
para evitar inyecciones:
<?php
$entrada = filter_input(INPUT_POST, "texto", FILTER_SANITIZE_STRING) ?? "";
printf("%s\n", $entrada);
?>
- XSS: Usa
htmlspecialchars()
al mostrar datos formateados en HTML.
Siguiente
Manipulación de cadenas de texto