Сохранять разрывы строк в 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

superUntitled
источник
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>'));
}
UbiQue
источник
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