W3docs

nl2br()

Articolo sulla funzione PHP nl2br(), che inserisce interruzioni di riga HTML prima di ogni carattere di nuova riga in una stringa.

La funzione PHP nl2br() inserisce un'interruzione di riga HTML (<br /> o <br>) prima di ogni carattere di nuova riga (\n, \r\n, \r o \n\r) in una stringa. È una delle funzioni più comuni nello sviluppo web con PHP, perché le nuove righe nel testo normale — quelle che un utente inserisce premendo il tasto Invio, o che provengono da un database — sono invisibili in HTML. I browser comprimono gli spazi bianchi, quindi un messaggio su più righe visualizzato direttamente in una pagina appare come un'unica riga continua. nl2br() colma questa lacuna trasformando ogni interruzione di riga in un elemento di markup che il browser interpreta correttamente.

Questo capitolo tratta la sintassi, il parametro $is_xhtml, cosa fa (e non fa) nl2br(), il caso d'uso tipico con l'input dell'utente e il problema di sicurezza che non bisogna mai ignorare.

Sintassi

nl2br(string $string, bool $use_xhtml = true): string
ParametroDescrizione
$stringLa stringa di input da elaborare. Obbligatorio.
$use_xhtmlFacoltativo. Determina se emettere tag <br /> compatibili con XHTML. Il valore predefinito è true. Se false, vengono usati tag <br> semplici.

La funzione restituisce una nuova stringa con le interruzioni inserite; le stringhe PHP sono immutabili, quindi la $string originale rimane invariata.

Esempio base

php— editable, runs on the server

Output (l'HTML grezzo ricevuto dal browser):

Hello<br />
World!

Si noti che il \n originale è ancora presentenl2br() aggiunge il <br /> prima della nuova riga, non la sostituisce. Questo è intenzionale: mantiene la leggibilità del sorgente quando si visualizza il codice sorgente della pagina, mentre è il <br /> a forzare l'interruzione di riga visibile.

Controllo dello stile del tag con $use_xhtml

Passare false come secondo argomento per ottenere tag <br> in stile HTML5 invece della forma XHTML con chiusura automatica:

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

Output:

Line 1<br>
Line 2

Usare <br /> (il valore predefinito) per documenti XHTML o XML; entrambe le forme sono valide in HTML5, quindi il valore predefinito funziona quasi ovunque.

Il caso d'uso reale: l'input dell'utente

La funzione è particolarmente utile quando si visualizza il testo inviato da un utente tramite un <textarea>. I browser ignorano le nuove righe digitate dall'utente, quindi senza nl2br() un commento su più paragrafi viene visualizzato come un unico blocco. Esiste però una regola fondamentale sull'ordine delle operazioni: prima si esegue l'escape, poi si aggiungono le interruzioni. Se si esegue nl2br() sull'input grezzo si proteggono le interruzioni di riga ma si lascia aperta la porta agli attacchi XSS, perché nl2br() non esegue l'escape dell'HTML — aggiunge solo i tag <br>.

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

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

htmlspecialchars() neutralizza qualsiasi <, > o & digitato dall'utente, dopodiché nl2br() aggiunge tag <br /> sicuri. Invertire l'ordine — htmlspecialchars(nl2br($comment)) — eseguirebbe l'escape dei propri tag <br /> trasformandoli nel testo visibile &lt;br&gt;, quindi le interruzioni non verrebbero mai visualizzate.

Errori comuni

  • Non rimuove né sostituisce la nuova riga. Il carattere \n rimane nella stringa. Se si ha bisogno di eliminare l'interruzione di riga, eseguire str_replace() in seguito.
  • Non è una funzione di sicurezza. nl2br() non esegue alcun escape. Usarla sempre insieme a htmlspecialchars() con input non attendibile.
  • Agisce solo sui caratteri di nuova riga, non sul ritorno a capo visivo di <textarea> — quelli sono solo visivi e non raggiungono mai lo script.
  • Solo per testo normale. Inviarne l'output come corpo di un'email o scriverlo in un CSV è inutile; i tag <br> sono HTML e non hanno significato al di fuori di un browser.

Funzioni correlate

  • htmlspecialchars() — eseguire l'escape dei caratteri speciali prima dell'output (da usare insieme a nl2br()).
  • str_replace() — sostituire sottostringhe, ad esempio per rimuovere completamente le nuove righe.
  • strip-tags() — rimuovere i tag HTML da una stringa.
  • trim() — eliminare gli spazi bianchi iniziali e finali, incluse le nuove righe superflue.

Esercitazione

Pratica
Cosa fa la funzione nl2br() in PHP?
Cosa fa la funzione nl2br() in PHP?
Was this page helpful?