wordwrap y nl2br en PHP: formatear texto largo para la web

Cuando el usuario escribe texto libre en un formulario, las salidas de pantalla pueden resultar ilegibles si no das formato al contenido antes de mostrarlo. wordwrap() corta líneas largas insertando un separador de línea, y nl2br() convierte los saltos de línea del texto plano en etiquetas <br> para que se vean en el navegador. Usadas conjuntamente con htmlspecialchars() cubren los casos más habituales de texto generado por usuarios.

wordwrap(): cortar líneas largas

<?php
wordwrap(
    string $string,
    int    $width       = 75,
    string $break       = "n",
    bool   $cut_long_words = false
): string
?>

Por defecto corta en el espacio más cercano antes del límite de columna. Si $cut_long_words es true, corta dentro de las palabras cuando estas son más largas que $width:

<?php
$texto = 'Las funciones de cadena en PHP cubren desde el formateo básico hasta la manipulación avanzada de bytes multibyte con la extensión mbstring.';

echo wordwrap($texto, 50, "n");
// Las funciones de cadena en PHP cubren desde el
// formateo básico hasta la manipulación avanzada
// de bytes multibyte con la extensión mbstring.
?>

El parámetro cut_long_words para URLs

Sin cut_long_words = true, una URL larga sin espacios se desbordará igualmente. Con la opción activada, PHP la cortará aunque sea en mitad de la palabra:

<?php
$mensaje = 'Descarga el PDF aquí: https://ejemplo.com/documentos/manuales/php/funciones-de-cadena-guia-completa-2024.pdf gracias.';

// Sin cut_long_words: la URL no se corta y desborda
echo wordwrap($mensaje, 40, "n", false);

echo "n---n";

// Con cut_long_words: la URL se parte en 40 caracteres
echo wordwrap($mensaje, 40, "n", true);
?>

nl2br(): saltos de línea visibles en el navegador

Un salto de línea (n) en texto plano no produce ningún salto visual en HTML. nl2br() inserta <br /> antes de cada n para que se muestre correctamente:

<?php
$comentario = "Primer párrafo con información.nSegundo párrafo con más detalles.nTercer párrafo.";

echo nl2br($comentario);
// Primer párrafo con información.
// Segundo párrafo con más detalles.
// Tercer párrafo. ?>

Combinarlas con htmlspecialchars de forma segura

El orden importa: primero escapa el HTML para prevenir XSS y luego aplica nl2br(), porque si lo haces al revés los <br> que acabas de insertar quedarán escapados como texto plano:

<?php
function mostrarComentario(string $texto): string
{
    // 1. Escapa caracteres especiales HTML (previene XSS)
    $seguro = htmlspecialchars($texto, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');

    // 2. Convierte saltos de línea reales en 
return nl2br($seguro); } $comentario = "Me gusta este tutorial.nMuy claro y con ejemplos reales.n"; echo mostrarComentario($comentario); // Me gusta este tutorial.
// Muy claro y con ejemplos reales.
// <script>alert('xss')</script> ?>

Formatear texto para un correo de texto plano

<?php
function formatearEmailPlano(string $cuerpo, int $columnas = 72): string
{
    return wordwrap($cuerpo, $columnas, "rn");
}

$mensaje = 'Estimado cliente, le informamos de que su pedido número PED-000742 ha sido procesado y se encuentra en camino. Recibirá un email con el número de seguimiento en las próximas horas. Muchas gracias por su confianza.';

echo formatearEmailPlano($mensaje);
?>

Los clientes de correo suelen tener límites de 72-76 caracteres por línea para texto plano. Usar "rn" en lugar de "n" es más compatible con el estándar MIME.

La documentación oficial de wordwrap() y la de nl2br() detallan el comportamiento con distintos tipos de saltos de línea.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP