Зберегти перерви в рядку від TextArea під час запису до MySQL


105

Я використовую текстову область, щоб дозволити користувачам вводити коментарі. Однак якщо користувачі вводять нові рядки, нові рядки не з’являються при їх виведенні. Чи є спосіб, щоб перерви в лінії залишилися

Будь-яка ідея, як зберегти розриви рядків?


Щойно я відключив htmlawed, і, здається, це не має нічого спільного з розривами рядків, розриви рядків все ще не відображаються. Тому я просто записую дані textarea безпосередньо в mysql, і вони не відображаються, коли я повторюю дані з бази даних mysql.
Гірвеш

Я також переглянув таблицю mysql за допомогою phpmyadmin і побачив поле коментарів. Жодні <br/> теги не зберігаються,
Гірвеш,

Я роблю систему коментарів у стилі Facebook, тому не дуже хочу, щоб це було wysiwyg. Немає ідей, чому тоді не залишаються розриви рядків?
Гірвеш

Відповіді:


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

Отримав власну відповідь: Використання цієї функції з даних з textarea вирішує проблему:

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'));
}

це може вам допомогти

пройти textarea wal


-8

Чому зробити так sooooo важких людей, коли це може бути soooo легко :)

//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);

вам, очевидно, потрібні заголовки і, ймовірно, буде більше полів, але це ваша подруга textarea


6
Це небезпечно і не зовсім актуально для питання.
Еван Дарвін

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

З усіх відповідей ця найменш стисла
JacobRossDev
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.