简体   繁体   中英

How can I replace newline or \r\n with <br/>?

I am trying to simply replace some new lines and have tried three different ways, but I don't get any change:

$description = preg_replace('/\r?\n|\r/', '<br/>', $description);
$description = str_replace(array("\r\n", "\r", "\n"), "<br/>", $description);
$description = nl2br($description);

These should all work, but I still get the newlines. They are double: "\\r\\r". That shouldn't make any of these fail, right?

There is already the nl2br() function that inserts <br> tags before new line characters:

Example ( codepad ):

<?php
// Won't work
$desc = 'Line one\nline two';
// Should work
$desc2 = "Line one\nline two";

echo nl2br($desc);
echo '<br/>';
echo nl2br($desc2);
?>

But if it is still not working make sure the text $desciption is double-quoted.

That's because single quotes do not 'expand' escape sequences such as \\n comparing to double quoted strings. Quote from PHP documentation:

Note : Unlike the double-quoted and heredoc syntaxes, variables and escape sequences for special characters will not be expanded when they occur in single quoted strings.

尝试使用这个:

$description = preg_replace("/\r\n|\r|\n/", '<br/>', $description);

You may have real characters "\\" in the string (the single quote strings, as said @Robik).

If you are quite sure the '\\r' or '\\n' strings should be replaced as well, I'm not talking of special characters here but a sequence of two chars '\\' and 'r', then escape the '\\' in the replace string and it will work:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description);

尝试这个:

echo str_replace(array('\r\n', '\n\r', '\n', '\r'), '<br>', $description);

nl2br() as you have it should work fine:

$description = nl2br($description);

It's more likely that the unclosed ' on the first line of your example code is causing your issue. Remove the ' after $description...

...$description');

This will work for sure:

str_replace("\\r", "<br />", $description); 
str_replace("\\n", "<br />", $description); 

nl2br() worked for me, but I needed to wrap the variable with double quotes:

This works:

$description = nl2br("$description");

This doesn't work:

$description = nl2br($description);
$description = nl2br(stripcslashes($description));

I think str_replace(array("\\\\r\\\\n", "\\\\r", "\\\\n"), " ", $string); will work.

If you are using nl2br , all occurrences of \\n and \\r will be replaced by <br> . But if (I don't know how it is) you still get new lines you can use

str_replace("\r","",$description);
str_replace("\n","",$description);

to replace unnecessary new lines by an empty string.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM