Scrivi \n dentro una stringa tra virgolette doppie per stampare una nuova riga: echo "Line 1\nLine 2";. La costante PHP_EOL fa lo stesso e si legge meglio alla fine di una riga: echo 'Done' . PHP_EOL;. In una pagina web un a capo non appare come interruzione di riga; lì ti servono <br> o nl2br().
Apici singoli e virgolette doppie
Le sequenze di escape come \n e \t funzionano solo tra virgolette doppie. Tra apici singoli, '\n' è formato da due caratteri: una barra rovesciata e la lettera n. È il motivo abituale per cui "\n non funziona".
La pagina sulle stringhe elenca tutte le sequenze di escape che le virgolette doppie riconoscono.
PHP_EOL e "\n"
PHP_EOL è il fine riga del sistema su cui gira PHP: "\n" su Linux e macOS, "\r\n" su Windows. Usalo per l'output nel terminale e per i file che leggerai sulla stessa macchina. Quando un formato definisce il suo fine riga, usa quello: le intestazioni HTTP e le email richiedono "\r\n", e la maggior parte degli strumenti legge senza problemi "\n" ovunque.
"\r" è un ritorno carrello, "\n" un avanzamento di riga. I file Windows terminano le righe con entrambi, "\r\n", ed è per questo che il testo di un utente Windows o di una <textarea> contiene spesso caratteri \r inattesi.
A capo in HTML: br e nl2br
Un browser riduce gli a capo a un singolo spazio, quindi echo "a\nb" mostra a b su una pagina. O stampi tu <br>, oppure mantieni gli a capo nel testo e li converti con nl2br(), che inserisce <br /> prima di ciascuno. Eseguilo e confronta le schede Output e Page:
Nella scheda Output i tre sembrano simili. Nella scheda Page il primo finisce tutto su una riga, nl2br() lo divide e <pre> mantiene gli a capo come sono scritti.
Mostrare l'input di una textarea con i suoi a capo
Il testo di una <textarea> mantiene le righe scritte dall'utente, ma devi applicare l'escape prima di stamparlo nell'HTML. L'ordine conta: prima htmlspecialchars(), poi nl2br(), altrimenti verrebbero sottoposti a escape i tag <br /> stessi. Eseguilo, scrivi qualche riga nella casella e premi Preview: lo stesso script viene eseguito di nuovo con $_POST compilato.
Un a capo di una textarea può arrivare come "\r\n" o "\n"; entrambi contengono "\n", quindi contare quel carattere funziona in tutti e due i casi. htmlspecialchars() spiega perché qui l'escape non è facoltativo.
Dividere una stringa per righe
explode("\n", $text) funziona per il testo che hai creato tu. Per il testo di utenti o file, i fine riga possono essere "\r\n", "\n" o "\r"; preg_split('/\R/', $text) li gestisce tutti, perché \R corrisponde a qualsiasi interruzione di riga.
Rimuovere le interruzioni di riga da una stringa
Per trasformare un testo su più righe in una sola riga, sostituisci ogni tipo di fine riga. Sostituisci "\r\n" prima dei singoli caratteri, altrimenti ogni a capo di Windows diventerebbe due spazi:
trim() e rtrim() rimuovono gli a capo alle estremità di una stringa ma mai in mezzo, quindi sono lo strumento giusto per una riga letta da un file e quello sbagliato per unire delle righe.
Domande frequenti
Come stampo una nuova riga con echo in PHP?
Metti \n dentro una stringa tra virgolette doppie: echo "Line 1\nLine 2";. Oppure aggiungi la costante: echo 'Line 1' . PHP_EOL;. In un browser un a capo non si vede; lì usa <br> o nl2br().
Perché \n non funziona in PHP?
O la stringa è tra apici singoli, dove '\n' è una barra rovesciata e una n, oppure l'output viene mostrato come HTML, dove il browser tratta un a capo come uno spazio. Usa "\n" tra virgolette doppie per l'output testuale e nl2br() o <br> per le pagine web.
Cos'è PHP_EOL?
Una costante che contiene il fine riga del sistema operativo su cui gira PHP: "\n" su Linux e macOS, "\r\n" su Windows. Usala per l'output destinato al terminale o ai file locali; per HTTP, email e file CSV di solito è il formato a stabilire il fine riga, indipendentemente dal sistema operativo.
Cosa fa nl2br in PHP?
nl2br($text) inserisce <br /> prima di ogni interruzione di riga della stringa, così il testo scritto in una <textarea> mantiene le sue righe quando viene mostrato in HTML. Prima applica l'escape: nl2br(htmlspecialchars($text)).
Come rimuovo le interruzioni di riga da una stringa in PHP?
Sostituisci tutti e tre i tipi di fine riga: str_replace(["\r\n", "\r", "\n"], ' ', $text), oppure con un'espressione regolare, preg_replace('/\R/', ' ', $text). Per rimuovere solo l'a capo finale, usa rtrim($text, "\r\n").