Сохранять разрывы строк в TextArea при записи в MySQL


105

Я использую текстовое поле, чтобы пользователи могли вводить комментарии. Однако, если пользователь вводит новые строки, новые строки не появляются при выводе. Есть ли способ сохранить разрывы строк.

Есть идеи, как сохранить разрывы строк?


Я только что отключил htmlawed, и кажется, что это не имеет никакого отношения к разрывам строк, разрывы строк по-прежнему не отображаются. Поэтому я просто пишу данные textarea непосредственно в mysql, и они не отображаются, когда я эхо-данные из базы данных mysql.
Hirvesh

Я также просмотрел таблицу mysql с помощью phpmyadmin и увидел поле комментария. Теги <br/> не сохраняются,
Хирвеш

Я делаю систему комментариев в стиле Facebook, поэтому я не хочу, чтобы она была wysiwyg. Нет идей, почему разрывы строк не сохраняются?
Hirvesh

Ответы:


158

Два решения для этого:

  1. Функция PHP nl2br():

    например,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
  2. Оберните ввод в <pre></pre>теги.

    См .: W3C Wiki - HTML / Elements / pre


2
+1, только что получил привилегированное место в моем Избранном для PHP nl2br():)
Зуул

1
Я думаю, что выбор и стиль <pre> </pre> намного лучше для xss.
EGurelli

38

Вот что я использую

$textToStore = nl2br(htmlentities($inputText, ENT_QUOTES, 'UTF-8'));

$inputTextэто текст, предоставляемый формой или текстовым полем. $textToStore- это текст, возвращаемый из nl2brи htmlentities, который будет сохранен в вашей базе данных. ENT_QUOTESпреобразует как двойные, так и одинарные кавычки, поэтому у вас не будет проблем с ними.


2
Я считаю, что UTF-8 теперь используется по умолчанию в PHP. Но, конечно, не помешает быть откровенным.
ProfileTwist

Как можно вставлять пробелы между текстами?
JWC

Вы всегда должны хранить необработанные данные в базе данных. Затем конвертируйте и дезинфицируйте данные перед их отображением.
Эдвард

3

Получил свой ответ: использование этой функции из данных из текстового поля решает проблему:

function mynl2br($text) { 
   return strtr($text, array("\r\n" => '<br />', "\r" => '<br />', "\n" => '<br />')); 
} 

Подробнее здесь: http://php.net/nl2br


2

Я использую эти два шага метода для сохранения того же текста, который находится в textarea, для хранения в mysql, и во время получения я также могу просто отображать простой текст ...

шаг 1:

$status=$_POST['status'];<br/>
$textToStore = nl2br(htmlentities($status, ENT_QUOTES, 'UTF-8'));

В запросе введите $textToStore....

шаг 2:

напишите код для запроса выбора ... и значений прямого эха ....

Оно работает


Вы всегда должны хранить необработанные данные в базе данных. Затем конвертируйте и дезинфицируйте данные перед их отображением.
Эдвард

1

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

function getBreakText($t) {
    return strtr($t, array('\\r\\n' => '<br>', '\\r' => '<br>', '\\n' => '<br>'));
}

0
function breakit($t) {
    return nl2br(htmlentities($t, ENT_QUOTES, 'UTF-8'));
}

это может вам помочь

передать текстовое поле


-8

почему делать это оооочень сложно, когда это может быть оооочень просто :)

//here is the pull from the form
$your_form_text = $_POST['your_form_text'];


//line 1 fixes the line breaks - line 2 the slashes
$your_form_text = nl2br($your_form_text);
$your_form_text = stripslashes($your_form_text);

//email away
$message = "Comments: $your_form_text";
mail("destination_email@whatever.com", "Website Form Submission", $message, $headers);

вам, очевидно, понадобятся заголовки и, вероятно, будет больше полей, но это ваше текстовое поле, о котором нужно позаботиться


6
Это небезопасно и не совсем относится к вопросу.
Эван Дарвин

1
Просто попробуйте .... Отправьте сообщение по электронной почте или SQL .... Картофель картофель ..... Попробуйте запустить строки и исправить проблему .... Без кучи строк беспорядочного кода, который иногда работает или не работает .... :)
Дункан

Из всех ответов этот наименее краткий
JacobRossDev
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.