Проблемы с Textareas, New Lines и nl2br - PullRequest
2 голосов
/ 12 декабря 2011

У меня проблемы с извлечением данных из базы данных и выводом их на текстовую область HTML-страницы.

Этот код используется для передачи данных в базу данных:

$_SESSION['content'] = mysqli_real_escape_string($link, strip_tags($_POST['content'],'<a>'));

Это просто удаляет теги HTML, за исключением ссылок и магазинов в базе данных.Если вы посмотрите в базе данных, разрывы строк невидимы, но есть, поэтому я предполагаю, что они \ n и \ r.

Если бы я набрал текстовую область:

This should be a 

New line

База данных хранит это как:

This should be a<br>
New line

Когда отображается в текстовой области, это то, что отображается:

This should be a \r\n\r\nNew line

Я уверен, что мне не хватает чего-то очень простого, любая помощьс благодарностью.

ОБНОВЛЕНИЕ:

Если я удаляю mysqli_real_escape_string, разрывы строк сохраняются и работают отлично, я должен пожертвовать безопасностью для этого?

РЕШЕНО:

mysqli_real_escape_string, вызывающее проблему, не выводите переменную, к которой это применено.Используйте mysqli_real_escape_string только при вставке, удалении и т. Д. Из базы данных, а не до, определенно не после;)

Спасибо всем!

Ответы [ 5 ]

5 голосов
/ 12 декабря 2011

Используйте правильный HTML / CSS.

; -)

Строка разрывает всю работу в пред теге HTML или в теге со свойством пробела CSS, установленным в:

white-space: pre;

Ресурсы:

http://www.w3schools.com/cssref/pr_text_white-space.asp

http://www.quirksmode.org/css/whitespace.html

1 голос
/ 04 апреля 2015

Для очень длинных строк вам также нужно обернуть текст вместо того, чтобы вырваться из его родительского контейнера.Чтобы охватить этот случай, но также сохранить новые строки, используйте следующий css:

white-space: pre-wrap;

resource: https://css -tricks.com / almanac / properties / w / whitespace /

1 голос
/ 15 апреля 2014

Это сработало для меня:

function br2nl( $input ) {
    return preg_replace( '/\<br.*\>/Ui', '', $input );
}
1 голос
/ 12 декабря 2011

Во-первых, вы не должны использовать nl2br, поскольку это изменит ваши \n на <br>.

Скорее всего, вам придется удалить косую черту echo stripslashes($_SESSION['content']).

Редактировать следующие комментарии:

Если данные хранятся как <br> в базе данных, вы можете просто сделать str_replace('<br>',"\n",$string);, который преобразует <br> в \n '

0 голосов
/ 12 декабря 2011

Функция nl2br работает с этим контентом в виде строки: http://codepad.org/M2Jw9KQJ

Это наводит меня на мысль, что вы не выводите на экран контент, который, как вы утверждаете, вы.

Выуверен, что содержание в БД, как вы говорите, есть?Возможно, вам нужно пойти другим путем:

function br2nl ($ data) {return preg_replace ("!! iU "," \ n ", $ data);}

...