Как заменить \r & \n на <br/>?

Попытка просто заменить некоторые новые строки. Пробовал 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 ответов

Решение

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

Пример ( кодовая панель):

<?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-последовательности для специальных символов не будут расширяться, если они встречаются в строках с одинарными кавычками.

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

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

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

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

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() так как у вас все должно работать нормально

$description = nl2br($description);

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

...$description');

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

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

$description = nl2br("$description");

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

$description = nl2br($description);

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

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

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

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

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

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

Другие вопросы по тегам