W3docs

nl2br()

Aprende sobre la función PHP nl2br(), que inserta saltos de línea HTML antes de cada carácter de nueva línea en una cadena de texto.

La función nl2br() de PHP inserta un salto de línea HTML (<br /> o <br>) antes de cada carácter de nueva línea (\n, \r\n, \r o \n\r) en una cadena. Es una de las funciones más comunes en el desarrollo web con PHP, porque los saltos de línea en texto plano — los que un usuario escribe con la tecla Enter, o que provienen de una base de datos — son invisibles en HTML. Los navegadores colapsan los espacios en blanco, por lo que un mensaje de varias líneas renderizado directamente en una página aparece como una sola línea continua. nl2br() cierra esa brecha convirtiendo cada salto de línea en marcado que el navegador realmente reconoce.

Este capítulo cubre la sintaxis, el parámetro $is_xhtml, lo que nl2br() hace (y no hace), el caso de uso típico con entrada de usuario y el problema de seguridad que no debes omitir.

Sintaxis

nl2br(string $string, bool $use_xhtml = true): string
ParámetroDescripción
$stringLa cadena de entrada a procesar. Obligatorio.
$use_xhtmlOpcional. Indica si se deben emitir etiquetas <br /> compatibles con XHTML. Por defecto es true. Cuando es false, se usan etiquetas <br> simples.

La función devuelve una nueva cadena con los saltos insertados; las cadenas en PHP son inmutables, por lo que el $string original no se modifica.

Ejemplo básico

php— editable, runs on the server

Salida (el HTML sin procesar que recibe el navegador):

Hello<br />
World!

Observa que el \n original sigue estando ahínl2br() añade el <br /> antes del salto de línea, no lo reemplaza. Esto es intencional: mantiene el código fuente legible al ver el código de la página, mientras que el <br /> es lo que fuerza el salto de línea visible.

Controlar el estilo de etiqueta con $use_xhtml

Pasa false como segundo argumento para obtener etiquetas <br> al estilo HTML5 en lugar del formato XHTML con cierre automático:

<?php
echo nl2br("Line 1\nLine 2", false);
?>

Salida:

Line 1<br>
Line 2

Usa <br /> (el valor predeterminado) para documentos XHTML o XML; cualquiera de las dos formas es válida en HTML5, por lo que el valor predeterminado funciona en casi todos los casos.

El caso de uso real: entrada del usuario

La función brilla cuando se muestra texto enviado por un usuario en un <textarea>. Los navegadores ignoran los saltos de línea que el usuario escribió, por lo que sin nl2br() un comentario de varios párrafos se renderiza como un solo bloque. Pero existe una regla de orden crítica: escapa primero, luego convierte los saltos. Si ejecutas nl2br() sobre la entrada sin procesar, proteges los saltos de línea pero dejas la puerta abierta a XSS, porque nl2br() no escapa HTML — solo añade etiquetas <br>.

<?php
$comment = "Hi there\nThanks for the great post!";

// Correct order: escape the HTML, THEN convert newlines.
echo nl2br(htmlspecialchars($comment));
?>

htmlspecialchars() neutraliza cualquier <, > o & que el usuario haya escrito, y nl2br() añade luego las etiquetas <br /> seguras. Invertir el orden — htmlspecialchars(nl2br($comment)) — escaparía tus propias etiquetas <br /> convirtiéndolas en texto visible &lt;br&gt;, por lo que los saltos nunca se renderizarían.

Errores comunes

  • No elimina ni reemplaza el salto de línea. El \n permanece en la cadena. Si necesitas que el salto de línea desaparezca, ejecuta str_replace() después.
  • No es una función de seguridad. nl2br() no realiza ningún escape. Úsala siempre junto con htmlspecialchars() en entradas no confiables.
  • Solo actúa sobre caracteres de nueva línea, no sobre el ajuste de texto de <textarea> ni sobre el ajuste de palabras — esos son solo visuales y nunca llegan a tu script.
  • Solo texto plano. Enviar su salida como cuerpo de un correo electrónico o escribirla en un CSV no tiene sentido; las etiquetas <br> son HTML y no significan nada fuera de un navegador.

Funciones relacionadas

  • htmlspecialchars() — escapa caracteres especiales antes de la salida (úsala junto con nl2br()).
  • str_replace() — reemplaza subcadenas, por ejemplo para eliminar saltos de línea por completo.
  • strip-tags() — elimina etiquetas HTML de una cadena.
  • trim() — elimina espacios en blanco al inicio y al final, incluidos saltos de línea no deseados.

Práctica

Práctica
¿Qué hace la función nl2br() en PHP?
¿Qué hace la función nl2br() en PHP?
Was this page helpful?