nl2br

(PHP 4, PHP 5, PHP 7)

nl2brInsere quebras de linha HTML antes de todas newlines em uma string

Descrição

string nl2br ( string $string )

Retorna string com '<br />' inserido antes de todas as newlines.

Parâmetros

string

A string de entrada.

Valor Retornado

Returns the altered string.

Changelog

Versão Descrição
4.0.5 nl2br() é agora XHTML compliant. Todas versões anteriores retornam string com '<br>' inserido antes de newlines ao invés de '<br />'.

Exemplos

Exemplo #1 usando nl2br()

<?php
echo nl2br("foo isn't\n bar");
?>

O exemplo acima irá imprimir:

foo isn't<br />
 bar

Veja Também

  • htmlspecialchars() - Converte caracteres especiais para a realidade HTML
  • htmlentities() - Converte todos os caracteres aplicáveis em entidades html.
  • wordwrap() - Quebra uma string em um dado número de caracteres
  • str_replace() - Substitui todas as ocorrências da string de procura com a string de substituição

add a note add a note

User Contributed Notes 11 notes

up
51
CGameProgrammer at gmail dot com
11 years ago
It's important to remember that this function does NOT replace newlines with <br> tags. Rather, it inserts a <br> tag before each newline, but it still preserves the newlines themselves! This caused problems for me regarding a function I was writing -- I forgot the newlines were still being preserved.

If you don't want newlines, do:

<?php
$Result
= str_replace( "\n", '<br />', $Text );
?>
up
13
fquffio at live dot it
1 year ago
Starting from PHP 4.3.10 and PHP 5.0.2, this should be the most correct way to replace <br /> and <br> tags with newlines and carriage returns.
<?php
/**
* Convert BR tags to newlines and carriage returns.
*
* @param string The string to convert
* @return string The converted string
*/
function br2nl ( $string )
{
    return
preg_replace('/\<br(\s*)?\/?\>/i', PHP_EOL, $string);
}
?>
(Please note this is a minor edit of this function: http://php.net/nl2br#86678 )

You might also want to be "platform specific", and therefore this function might be of some help:
<?php
/**
* Convert BR tags to newlines and carriage returns.
*
* @param string The string to convert
* @param string The string to use as line separator
* @return string The converted string
*/
function br2nl ( $string, $separator = PHP_EOL )
{
   
$separator = in_array($separator, array("\n", "\r", "\r\n", "\n\r", chr(30), chr(155), PHP_EOL)) ? $separator : PHP_EOL// Checks if provided $separator is valid.
   
return preg_replace('/\<br(\s*)?\/?\>/i', $separator, $string);
}
?>
up
29
N/A
7 years ago
Here's a more simple one:

<?php
/**
* Convert BR tags to nl
*
* @param string The string to convert
* @return string The converted string
*/
function br2nl($string)
{
    return
preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
}
?>

Enjoy
up
23
ngkongs at gmail dot com
8 years ago
to replace all linebreaks to <br />
the best solution (IMO) is:

<?php
function nl2br2($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
return
$string;
}
?>

because each OS have different ASCII chars for linebreak:
windows = \r\n
unix = \n
mac = \r

works perfect for me
up
12
Anders Norrbring
9 years ago
Seeing all these suggestions on a br2nl function, I can also see that neither would work with a sloppy written html line break.. Users can't be trusted to write good code, we know that, and mixing case isn't too uncommon.

I think this little snippet would do most tricks, both XHTML style and HTML, even mixed case like <Br> <bR /> and even <br            > or <br     />.

<?php
function br2nl($text)
{
    return 
preg_replace('/<br\\s*?\/??>/i', '', $text);
}
?>
up
0
leo dot mauro dot desenv at gmail dot com
4 months ago
I test empirically this function nl2br and nl2br2 (create by ngkongs at gmail dot com).
Both work nice with different ASCII chars for linebreak, but the function nl2br2 is faster than nl2br.

nl2br2 ~ 0.0000309944153 s
nl2br  ~ 0.0011141300201 s

The function nl2br2:
<?php
function nl2br2($string) {
 
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
  return
$string;
}
?>
up
1
blacknine313 at gmail dot com
7 years ago
After a recent post at the forums on Dev Shed, I noticed that it isn't mentioned, so I will mention it.

nl2br returns pure HTML, so it should be after PHP anti-HTML functions ( such as strip_tags and htmlspecialchars ).
up
-8
j dot mons54 at gmail dot com
3 years ago
for bbcode :

<?php
$message
nl2br(preg_replace('#(\\]{1})(\\s?)\\n#Usi', ']', stripslashes($message)));
?>
up
-19
hyponiq at gmail dot com
8 years ago
On the contrary, <b>mark at dreamjunky.comno-spam</b>, this function is rightfully named.  Allow me to explain.  Although it does re-add the line break, it does so in an attempt to stay standards-compliant with the W3C recommendations for code format.

According to said recommendations, a new line character must follow a line break tag.  In this situation, the new line is not removed, but a break tag is added for proper browser display where a paragraph isn't necessary or wanted.
up
-9
darenschwenke at yahoo dot com
2 years ago
This one works with br tags having attributes, in any case,
closed or  not closed, and does not double linefeeds

<?php
/**
* convert br tags to nl
*
* @param string The string to convert
* @return string The converted string
*/

function br2nl($string)
{
    return
preg_replace("/<br[^>]*>\s*\r*\n*/is", "\n", $string);
}
?>

I combine this with strip_tags() for dead simple "contenteditable" fields allowing only text and linefeeds.
up
-175
billhicks at yahoo dot com
1 year ago
Your new site does not work in ie.

But you already know this and I guess you don't really care.

its all about style now - funny because this is a php site not a css/java/ajax site.

piss off!!!!!!!!!!!!!!!
To Top