Как заменить символ новой строки или \ r \ n на <br/>? - PullRequest
64 голосов
/ 10 мая 2011

Попытка просто заменить некоторые новые строки.Пробовал 3 разных способа, и я не получил изменений:

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

Все это должно работать, но я все еще получаю переводы строкОни двойные: "\ r \ r".Это не должно привести ни к одному из них, верно?

Ответы [ 10 ]

117 голосов
/ 10 мая 2011

Уже существует функция nl2br(), которая заменяет , вставляет <br> теги перед символами новой строки:

Пример ( 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);
?>

Но если он все еще не работает, убедитесь, что текст $desciption заключен в двойные кавычки.

Это потому, что одинарные кавычки не расширяютсяescape-последовательности, такие как \n по сравнению со строками в двойных кавычках.Цитата из документации PHP:

Примечание : В отличие от синтаксиса с двойными кавычками и heredoc, переменные и escape-последовательности для специальных символов не будут раскрыты, если они встречаются в строках, заключенных в одинарные кавычки.

57 голосов
/ 10 мая 2011

Попробуйте использовать это

$description = preg_replace("/\r\n|\r|\n/",'<br/>',$description);
15 голосов
/ 10 мая 2011

У вас могут быть реальные символы "\" в строке (строки в одинарных кавычках, как сказано в @Robik).

Если вы уверены, что строки '\ r' или '\ n' должны бытьтакже я говорю не о специальных символах, а о последовательности из двух символов '\' и 'r', затем экранируйте '\' в строке замены, и она будет работать:

str_replace(array("\r\n","\r","\n","\\r","\\n","\\r\\n"),"<br/>",$description);
5 голосов
/ 10 мая 2011

nl2br() как у вас должно работать нормально:

$description = nl2br($description);

Скорее всего, незакрытая ' в первой строке вашего примера кода вызывает вашу проблему.Удалить 'после $ description ...

...$description');
3 голосов
/ 29 октября 2015

nl2br () работал для меня, но мне нужно было обернуть переменную двойными кавычками:

Это работает:

$description = nl2br("$description");

Это не работает:

$description = nl2br($description);
2 голосов
/ 07 марта 2017

Попробуйте это:

echo str_replace( array('\r\n','\n\r','\n','\r'), '<br>' , $description );
2 голосов
/ 14 сентября 2012

Это будет работать наверняка:

str_replace("\\r","<br />",$description); 
str_replace("\\n","<br />",$description); 
1 голос
/ 30 ноября 2018
$description = nl2br(stripcslashes($description));
0 голосов
/ 10 октября 2018

Я думаю str_replace (array ("\ r \ n", "\ r", "\ n"), "", $ string);Буду работать.

0 голосов
/ 10 мая 2011

Если вы используете nl2br, все вхождения \n и \r будут заменены на <br>.Но если (я не знаю, как это) вы все еще получаете новые строки, вы можете использовать

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

Чтобы заменить ненужные новые строки пустой строкой

...