Écrivez \n dans une chaîne entre guillemets doubles pour afficher un retour à la ligne : echo "Line 1\nLine 2";. La constante PHP_EOL fait la même chose et se lit plus clairement en fin de ligne : echo 'Done' . PHP_EOL;. Dans une page web, un saut de ligne ne s'affiche pas comme tel ; il vous faut alors <br> ou nl2br().
Guillemets simples ou doubles
Les séquences d'échappement comme \n et \t ne fonctionnent qu'entre guillemets doubles. Entre guillemets simples, '\n' fait deux caractères : une barre oblique inverse et la lettre n. C'est la raison habituelle du « \n ne fonctionne pas ».
La page sur les chaînes liste toutes les séquences d'échappement que comprennent les guillemets doubles.
PHP_EOL ou "\n"
PHP_EOL est la fin de ligne du système sur lequel tourne PHP : "\n" sur Linux et macOS, "\r\n" sur Windows. Utilisez-la pour la sortie terminal et pour des fichiers que vous lirez sur la même machine. Quand un format définit sa propre fin de ligne, utilisez-la plutôt : les en-têtes HTTP et les emails exigent "\r\n", et la plupart des outils lisent "\n" sans problème partout.
"\r" est un retour chariot, "\n" un saut de ligne. Les fichiers Windows terminent les lignes par les deux, "\r\n", c'est pourquoi un texte venant d'un utilisateur Windows ou d'un <textarea> contient souvent des caractères \r inattendus.
Retour à la ligne en HTML : br et nl2br
Un navigateur réduit les sauts de ligne à un seul espace, donc echo "a\nb" affiche a b sur une page. Affichez vous-même <br>, ou gardez les sauts de ligne dans votre texte et convertissez-les avec nl2br(), qui insère <br /> avant chacun. Exécutez ceci et comparez les onglets Output et Page :
Dans l'onglet Output, les trois se ressemblent. Dans l'onglet Page, le premier tient sur une seule ligne, nl2br() le découpe, et <pre> garde les sauts de ligne tels qu'ils sont écrits.
Afficher une saisie de textarea avec ses sauts de ligne
Le texte d'un <textarea> garde les lignes tapées par l'utilisateur, mais vous devez l'échapper avant de l'afficher dans du HTML. L'ordre compte : htmlspecialchars() d'abord, puis nl2br(), sinon les balises <br /> elles-mêmes seraient échappées. Exécutez-le, tapez quelques lignes dans la zone et cliquez sur Preview : le même script s'exécute à nouveau avec $_POST rempli.
Un saut de ligne de textarea peut arriver sous la forme "\r\n" ou "\n" ; les deux contiennent "\n", donc compter ce caractère fonctionne dans les deux cas. htmlspecialchars() explique pourquoi l'échappement n'est pas facultatif ici.
Découper une chaîne par ligne
explode("\n", $text) fonctionne pour un texte que vous avez créé vous-même. Pour du texte venant d'utilisateurs ou de fichiers, les fins de ligne peuvent être "\r\n", "\n" ou "\r" ; preg_split('/\R/', $text) les gère toutes, car \R correspond à n'importe quel saut de ligne.
Supprimer les sauts de ligne d'une chaîne
Pour transformer un texte sur plusieurs lignes en une seule ligne, remplacez chaque type de fin de ligne. Remplacez "\r\n" avant les caractères seuls, sinon chaque saut de ligne Windows deviendrait deux espaces :
trim() et rtrim() suppriment les sauts de ligne aux extrémités d'une chaîne mais jamais au milieu, c'est donc le bon outil pour une ligne lue dans un fichier et le mauvais pour réunir des lignes.
Questions fréquentes
Comment faire un retour à la ligne avec echo en PHP ?
Mettez \n dans une chaîne entre guillemets doubles : echo "Line 1\nLine 2";. Ou ajoutez la constante : echo 'Line 1' . PHP_EOL;. Dans un navigateur, un saut de ligne ne s'affiche pas ; utilisez-y <br> ou nl2br().
Pourquoi \n ne fonctionne-t-il pas en PHP ?
Soit la chaîne est entre guillemets simples, où '\n' est une barre oblique inverse suivie d'un n, soit la sortie est affichée en HTML, où le navigateur traite un saut de ligne comme un espace. Utilisez "\n" entre guillemets doubles pour une sortie texte, et nl2br() ou <br> pour les pages web.
Qu'est-ce que PHP_EOL ?
Une constante qui contient la fin de ligne du système d'exploitation sur lequel tourne PHP : "\n" sur Linux et macOS, "\r\n" sur Windows. Utilisez-la pour une sortie destinée au terminal ou à des fichiers locaux ; pour HTTP, les emails et les fichiers CSV, le format impose en général la fin de ligne quel que soit le système.
Que fait nl2br en PHP ?
nl2br($text) insère <br /> avant chaque saut de ligne de la chaîne, si bien qu'un texte tapé dans un <textarea> garde ses lignes une fois affiché en HTML. Échappez d'abord : nl2br(htmlspecialchars($text)).
Comment supprimer les sauts de ligne d'une chaîne en PHP ?
Remplacez les trois types de fin de ligne : str_replace(["\r\n", "\r", "\n"], ' ', $text), ou avec une expression régulière, preg_replace('/\R/', ' ', $text). Pour ne supprimer que le saut de ligne final, utilisez rtrim($text, "\r\n").