Захват переноса строк (новая строка, перевод строки) в текстовой области - PullRequest
19 голосов
/ 14 ноября 2008

У меня есть форма с <textarea>, и я хочу зафиксировать любые разрывы строк в этой текстовой области на стороне сервера и заменить их на <br/>.

Это возможно?

Я попытался установить white-space:pre на CSS textarea, но этого по-прежнему недостаточно.

Ответы [ 4 ]

34 голосов
/ 14 ноября 2008

Посмотрите на функцию nl2br(). Он должен делать именно то, что вы хотите.

9 голосов
/ 14 ноября 2008

Функция nl2br() существует именно для этого:

Однако эта функция добавляет теги br, но фактически не удаляет новые строки - обычно это не проблема, но если вы хотите полностью удалить их и также поймать возврат каретки, вам следует использовать str_replace или preg_replace

Я думаю, что str_replace будет немного быстрее, но я не тестировал;

$val = str_replace( array("\n","\r","\r\n"), '<br />', $val );

или

$val = preg_replace( "#\n|\r|\r\n#", '<br />', $val );
5 голосов
/ 24 февраля 2009

Если вы собираетесь использовать str_replace или preg_replace, вам, вероятно, следует поместить "\r\n" в начало массива, в противном случае последовательность \r\n будет преобразована в два тега <br/> (поскольку \r будет сопоставлено, а затем \n будет сопоставлено).

например:

$val = str_replace( array("\r\n", "\n","\r"), '<br />', $val );

или

$val = preg_replace( "#\r\n|\n|\r#", '<br />', $val );
0 голосов
/ 07 февраля 2014

Для тех, кто хочет получить ответ, который не зависит от nl2br():

$newList = ereg_replace( "\n",'|', $_POST['theTextareaContents']);

или (в данном случае):

$newList = ereg_replace( "\n",'<br/>', $_POST['theTextareaContents']);

Сторона PHP: от строки Textarea до строки PHP

$newList = ereg_replace( "\n",'|', $_POST['theTextareaContents']);

Сторона PHP: строка PHP возвращается к строке TextArea:

$list = str_replace('|', '&#13;&#10;', $r['db_field_name']);
...