Php find new line in string

This doesn't work:

$string = 'Hello
    world';

if(strpos($string, '\n')) {
    echo 'New line break found';
}
else {
    echo 'not found';
}

Obviously because the string doesn't have the "\n" character in it. But how else can I check to see if there is a line break that is the result of the user pressing enter in a form field?

Php find new line in string

animuson

52.7k28 gold badges139 silver badges145 bronze badges

asked Feb 24, 2012 at 19:52

6

Your existing test doesn't work because you don't use double-quotes around your line break character ('\n'). Change it to:

if(strstr($string, "\n")) {

Or, if you want cross-operating system compatibility:

if(strstr($string, PHP_EOL)) {

Also note that strpos will return 0 and your statement will evaluate to FALSE if the first character is \n, so strstr is a better choice. Alternatively you could change the strpos usage to:

if(strpos($string, "\n") !== FALSE) {
  echo 'New line break found';
}
else {
  echo 'not found';
}

answered Feb 24, 2012 at 19:55

rdlowreyrdlowrey

39.3k9 gold badges76 silver badges98 bronze badges

4

line break is \r\n on windows and on UNIX machines it is \n. so its search for PHP_EOL instead of "\n" for cross-OS compatibility, or search for both "\r\n" and "\n".

answered Feb 24, 2012 at 19:59

Php find new line in string

Mouna CheikhnaMouna Cheikhna

37.7k10 gold badges47 silver badges68 bronze badges

1

The most reliable way to detect new line in the text that may come from different operating systems is:

preg_match('/\R/', $string)

\R comes from PCRE and it is the same as: (?>\r\n|\n|\r|\f|\x0b|\x85|\x{2028}|\x{2029})

The suggested answer to check PHP_EOL

if(strstr($string, PHP_EOL)) {

will not work if you are for example on Windows sytem and checking file created in Unix system.

answered Nov 8, 2020 at 16:39

sprutexsprutex

6518 silver badges8 bronze badges

Topic: PHP / MySQLPrev|Next

Answer: Use the Newline Characters '\n' or '\r\n'

You can use the PHP newline characters \n or \r\n to create a new line inside the source code. However, if you want the line breaks to be visible in the browser too, you can use the PHP nl2br() function which inserts HTML line breaks before all newlines in a string.

Let's take a look at the following example to understand how it basically works:

";
echo nl2br("You will find the \n newlines in this string \r\n on the browser window.");
?>

Note: The character \n writes a newline in UNIX while for Windows there is the two character sequence: \r\n. To be on safe side use the \r\n instead.


Here are some more FAQ related to this topic:

  • How to combine two strings in PHP
  • How to remove white space from a string in PHP
  • How to write comments in PHP

(PHP 4, PHP 5, PHP 7, PHP 8)

nl2brInserts HTML line breaks before all newlines in a string

Description

nl2br(string $string, bool $use_xhtml = true): string

Parameters

string

The input string.

use_xhtml

Whether to use XHTML compatible line breaks or not.

Return Values

Returns the altered string.

Examples

Example #1 Using nl2br()

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

The above example will output:

Example #2 Generating valid HTML markup using the use_xhtml parameter

echo nl2br("Welcome\r\nThis is my HTML document"false);
?>

The above example will output:

Welcome
This is my HTML document

Example #3 Various newline separators

$string "This\r\nis\n\ra\nstring\r";
echo 
nl2br($string);
?>

The above example will output:

This
is
a
string

See Also

  • htmlspecialchars() - Convert special characters to HTML entities
  • htmlentities() - Convert all applicable characters to HTML entities
  • wordwrap() - Wraps a string to a given number of characters
  • str_replace() - Replace all occurrences of the search string with the replacement string

CGameProgrammer at gmail dot com

17 years ago

It's important to remember that this function does NOT replace newlines with
tags. Rather, it inserts a
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:

$Result = str_replace( "\n", '
'
, $Text );
?>

ngkongs at gmail dot com

15 years ago

to replace all linebreaks to

the best solution (IMO) is:

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

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

works perfect for me

N/A

13 years ago

Here's a more simple one:

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

Enjoy

fquffio at live dot it

8 years ago

Starting from PHP 4.3.10 and PHP 5.0.2, this should be the most correct way to replace
and
tags with newlines and carriage returns.
/**
* 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('/\/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:
/**
* 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('/\/i', $separator, $string);
}
?>

aabaev

3 years ago

double quotes !== single quotes

php > echo nl2br('\r\n');
\r\n
php > echo nl2br("\r\n");

Anders Norrbring

16 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

and even or .

function br2nl($text)
{
    return 
preg_replace('//i', '', $text);
}
?>

gautier dot michelin at gmail dot com

2 years ago

This is a simple trick to transform newlines to paragraph a $string :

$string_with_paragraphs = "

".implode("

", explode("\n", $string))."

";
?>

By exploding on new lines & adding end & begin for p, it's easy to concat with

.

You can bring it to a function :

function nl2p($string) {
    return
$string_with_paragraphs = "

".implode("

", explode("\n", $string))."

";
}
?>

Collette

2 years ago

Let's say a form text field does contain:
test line number 1
test line number 2

To remove all the line breaks and split the input into an array:

$input_from_text_field = preg_replace('#[\r\n]#','',nl2br($input_from_text_field,false));
$lines = explode("
",$input_from_text_field);

$lines will now be an array where $lines[0] = "test line number 1" and so on.

buzanits at gmail dot com

4 years ago

If you write code that is to run in browser AND on the shell, this function could be useful. It uses PHP_EOL or
depending on the platform it runs:

function nl($string) {
  if(isset(
$_SERVER['SHELL'])) return preg_replace('/\/i', PHP_EOL, $string);
  return
nl2br($string);
}

print

nl("One\nTwo
Three\r\nFour
Five
Six"
. PHP_EOL);
?>

leo dot mauro dot desenv at gmail dot com

7 years 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:
function nl2br2($string) {
 
$string = str_replace(array("\r\n", "\r", "\n"), "
"
, $string);
  return
$string;
}
?>

Justinas M.

6 years ago

This is example with "\R" regex token which matches any unicode newline character.
"u" flag treate strings as UTF-16. Which is optional, depending on your use case.

public function nl2br($string)
{
  return
preg_replace('/\R/u', '
'
, $string);
}
?>

NOTE:
preg_replace versions are much slower than using str_replace version or built-in nl2br.
Check out pcre.backtrack_limit php.ini setting for information about PCRE limit. It's good to know.

Some PHP7 benchmarks:
// nl2br()function nl2br_str($string) {
  return
str_replace(["\r\n", "\r", "\n"], '
'
, $string);
}

function

nl2br_preg_R($string)
{
  return
preg_replace('/\R/u', '
'
, $string);
}

function

nl2br_preg_rnnr($string)
{
  return
preg_replace('/(\r\n|\n|\r)/', '
'
, $string);
}
?>

# nl2br
## Time: 0.02895712852478 s

# nl2br_str
## Time: 0.027923107147217 s

# nl2br_preg_R
## Time: 0.13350105285645 s

# nl2br_preg_rnnr
## Time: 0.14213299751282 s

chad at nobodyfamous dot ca

5 years ago

I just spent a whole day trying to figure out why my textarea $_POST was not getting
tags added by nl2br().  So for others

(INPUT_POST, 'text', FILTER_SANITIZE_SPECIAL_CHARS); ?> returns newlines as  and so nl2br will miss them.

rather use (INPUT_POST, 'text', FILTER_SANITIZE_STRING); ?> and newlines will remain intact so nl2br will pick them up.

blacknine313 at gmail dot com

14 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 ).

darenschwenke at yahoo dot com

8 years ago

This one works with br tags having attributes, in any case,
closed or  not closed, and does not double linefeeds

/**
* convert br tags to nl
*
* @param string The string to convert
* @return string The converted string
*/
function br2nl($string)
{
    return
preg_replace("/]*>\s*\r*\n*/is", "\n", $string);
}
?>

I combine this with strip_tags() for dead simple "contenteditable" fields allowing only text and linefeeds.

j dot mons54 at gmail dot com

10 years ago

for bbcode :

$message nl2br(preg_replace('#(\\]{1})(\\s?)\\n#Usi', ']', stripslashes($message)));
?>

hyponiq at gmail dot com

15 years ago

On the contrary, mark at dreamjunky.comno-spam, 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.

How do you find a new line in a string?

In Windows, a new line is denoted using “\r\n”, sometimes called a Carriage Return and Line Feed, or CRLF. Adding a new line in Java is as simple as including “\n” , “\r”, or “\r\n” at the end of our string.

Does \n work in PHP?

Answer: Use the Newline Characters ' \n ' or ' \r\n ' You can use the PHP newline characters \n or \r\n to create a new line inside the source code.

What is Br in PHP?

Using Line Breaks as in HTML: The
tag in HTML is used to give the single line break. It is an empty tag, so it does not contain an end tag. Syntax:
Example: PHP.

How do you check line breaks?

To check whether a JavaScript string contains a line break, we can use the JavaScript regex's exec method. We call /\r|\n/. exec with text to return the matches of newline characters in text .