W3docs

nl2br()

Notre article présente la fonction PHP nl2br(), qui insère des sauts de ligne HTML avant chaque retour à la ligne dans une chaîne.

La fonction PHP nl2br() insère un saut de ligne HTML (<br /> ou <br>) avant chaque caractère de nouvelle ligne (\n, \r\n, \r, ou \n\r) dans une chaîne. C'est l'une des fonctions les plus courantes du développement web PHP, car les retours à la ligne dans du texte brut — ceux qu'un utilisateur tape avec la touche Entrée, ou qui proviennent d'une base de données — sont invisibles en HTML. Les navigateurs regroupent les espaces blancs, de sorte qu'un message multi-lignes affiché directement dans une page s'affiche comme une seule ligne continue. nl2br() comble cet écart en transformant chaque saut de ligne en balise que le navigateur respecte réellement.

Ce chapitre couvre la syntaxe, le paramètre $is_xhtml, ce que nl2br() fait (et ne fait pas) modifier, le cas d'utilisation typique avec la saisie utilisateur, et le problème de sécurité à ne surtout pas ignorer.

Syntaxe

nl2br(string $string, bool $use_xhtml = true): string
ParamètreDescription
$stringLa chaîne d'entrée à traiter. Obligatoire.
$use_xhtmlOptionnel. Indique si des balises <br /> compatibles XHTML doivent être générées. Par défaut true. Quand false, des balises <br> simples sont utilisées.

La fonction retourne une nouvelle chaîne avec les sauts insérés ; les chaînes PHP sont immuables, donc le $string original reste inchangé.

Exemple de base

php— editable, runs on the server

Sortie (le HTML brut reçu par le navigateur) :

Hello<br />
World!

Remarquez que le \n original est toujours présentnl2br() ajoute le <br /> avant la nouvelle ligne, sans la remplacer. C'est intentionnel : cela garde la source lisible lorsque vous affichez le code source de la page, tandis que le <br /> est ce qui force le saut de ligne visible.

Contrôler le style de balise avec $use_xhtml

Passez false comme second argument pour obtenir des balises <br> au style HTML5 au lieu de la forme XHTML auto-fermante :

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

Sortie :

Line 1<br>
Line 2

Utilisez <br /> (la valeur par défaut) pour les documents XHTML ou XML ; les deux formes sont valides en HTML5, donc la valeur par défaut fonctionne presque partout.

Le vrai cas d'utilisation : la saisie utilisateur

La fonction est particulièrement utile lorsque vous affichez du texte soumis par un utilisateur dans un <textarea>. Les navigateurs ignorent les retours à la ligne tapés par l'utilisateur, de sorte que sans nl2br() un commentaire multi-paragraphes s'affiche en un seul bloc. Mais il existe une règle d'ordre cruciale : échapper d'abord, puis insérer les sauts. Si vous exécutez nl2br() sur une entrée brute, vous préservez les sauts de ligne mais laissez la porte ouverte aux attaques XSS, car nl2br() n'échappe pas le HTML — il ajoute uniquement des balises <br>.

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

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

htmlspecialchars() neutralise tout <, > ou & tapé par l'utilisateur, et nl2br() ajoute ensuite des balises <br /> sûres. Inverser l'ordre — htmlspecialchars(nl2br($comment)) — échapperait vos propres balises <br /> en texte visible &lt;br&gt;, de sorte que les sauts ne s'afficheraient jamais.

Pièges courants

  • Elle ne supprime ni ne remplace la nouvelle ligne. Le \n reste dans la chaîne. Si vous avez besoin de supprimer le saut de ligne, exécutez str_replace() ensuite.
  • Ce n'est pas une fonction de sécurité. nl2br() n'effectue aucun échappement. Associez-la toujours à htmlspecialchars() pour les entrées non fiables.
  • Elle n'agit que sur les caractères de nouvelle ligne, pas sur le retour à la ligne automatique du <textarea> — ceux-ci sont visuels uniquement et n'atteignent jamais votre script.
  • Texte brut uniquement. Envoyer sa sortie dans le corps d'un e-mail ou l'écrire dans un CSV est inutile ; les balises <br> sont du HTML et ne signifient rien en dehors d'un navigateur.

Fonctions associées

  • htmlspecialchars() — échapper les caractères spéciaux avant l'affichage (à utiliser conjointement avec nl2br()).
  • str_replace() — remplacer des sous-chaînes, par exemple pour supprimer entièrement les nouvelles lignes.
  • strip-tags() — supprimer les balises HTML d'une chaîne.
  • trim() — supprimer les espaces en début et fin de chaîne, y compris les nouvelles lignes parasites.

Pratique

Pratique
Que fait la fonction nl2br() en PHP ?
Que fait la fonction nl2br() en PHP ?
Was this page helpful?