Как правильно вставлять текст в БД - PHP

LH
На сайте с 26.09.2013
Offline
89
681

День добрый!

Есть поле <textarea>

В него вставляю описание:

------------------------------------------------

Lorem ipsum dolor sit amet,

consectetur adipisicing elit,

sed do eiusmod tempor incididunt ut

labore et dolore magna aliqua.

Ut enim ad minim veniam, quis nostru

exercitation ullamco laboris

nisi ut aliquip ex ea commodo consequat.

------------------------------------------------

Как правильно вставлять текст в БД с сохранением переноса (клавиша ENTER) строк? И как правильно выводить отформатированный текст?

Важный момент: перед отправкой в бд, я кодирую массив функцией json_encode;

Когда вывожу текст , использую ключ $data['description'] в котором содержится этот текст. Но он не выводится. Однако, если в бд удалить перенесенные строки и оставить одну сплошную, то тест выводится. То есть я подозреваю, что нужно кодировать в одну строку. Как это сделать??

igor3310
На сайте с 27.02.2011
Offline
156
#1

тег <br> поможет или попробуйте \r\n

Веб разработка WordPress, OpenCart, Modx Revo и прочее - https://searchengines.guru/ru/forum/1040224
ДП
На сайте с 23.11.2009
Offline
203
#2

Тут смотрите в чём дело-то, перенос строк в тексте не будет работать, если вы этот текст выведете внутри html. Для того, чтобы пеерносы строк получились на нужных местах - используйте функцию nl2br()

Насчёт кодирования в json_encode - не очень понял, дайте код.

M
На сайте с 04.12.2013
Offline
223
#3

Leonid H, чтобы разрыв сохранялся при выводе на страницу, обычно используют <br> или </p><p> (\r\n подойдет только с тегом pre). Можно использовать редактор вроде TinyMCE – большую часть работы он сделает за вас.

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
LH
На сайте с 26.09.2013
Offline
89
#4
Дикий пионер:
Тут смотрите в чём дело-то, перенос строк в тексте не будет работать, если вы этот текст выведете внутри html. Для того, чтобы пеерносы строк получились на нужных местах - используйте функцию nl2br()
Насчёт кодирования в json_encode - не очень понял, дайте код.

Я использовал эту функцию:

В итоге в уже в самой БД получилось:

---------------------------

Lorem ipsum dolor sit amet,<br>

consectetur adipisicing elit,<br>

sed do eiusmod tempor incididunt ut<br>

...

---------------------------

То есть в конец добавились бр. но это идет не одной строкой, как например:

---------------------

Lorem ipsum dolor sit amet,<br>consectetur adipisicing elit,<br>sed do eiusmod tempor incididunt ut<br>

----------------------

Визуально переносы строк сохраняются и в БД, как с nl2br так и без нее) только с ней добавляются в конец теги.

Сам код:

так вот description это <textarea> в форме;

---------------------------

$data = [ 'title' => $title, // string

'category' => $category, // int

'description' => $description, // string

'image' => $image, // string

'length' => $length, // int

'weight' => $weight, // int

'price' => $price, // array

'note' => $note, // string

];

$data = json_encode($data, JSON_UNESCAPED_UNICODE);

-----------------------------------------------------------------------------

Выводится одна строка. Как только в БД в ручную делаю перенос(клавиша интер) и всталвяю вторую строку, то описание не выводится. Если вручную ставлю \n то работает.

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5

У вас MySQL просто строки \r\n портит, наверное. Используйте prepared statements когда пихаете данные в базу. Какое, кстати, у вас значение параметра magic_quotes_gpc в настройках php.ini?

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
LH
На сайте с 26.09.2013
Offline
89
#6
Какое, кстати, у вас значение параметра magic_quotes_gpc в настройках php.ini?

Нету такой переменной.

Стоит Open Server

Смотрел тут ..modules\php\PHP-7\php.ini

и тут ..modules\php\PHP-7\PHP-7_php.ini

p.s в других версиях пхп: magic_quotes_gpc = Off

totamon
На сайте с 12.05.2007
Offline
437
#7
Leonid H:
Визуально переносы строк сохраняются и в БД, как с nl2br так и без нее) только с ней добавляются в конец теги.

а зачем вам в одну строку? какая разница?

вместо nl2br можно заменять переносы на br

$data['description'] = str_replace(array("\r\n", "\r", "\n"), '<br>', $data['description']);
Домены и хостинг https://8fn.ru/regru | Дедик от 3000р https://8fn.ru/73 | VPS в Москве https://8fn.ru/72 | Лучшие ВПС, ТП огонь, все страны! https://8fn.ru/inferno | ХОСТИНГ №1 РОССИИ https://8fn.ru/beget
Ragnarok
На сайте с 25.06.2010
Offline
239
#8

что-то не то.

давайте весь код вывода из базы

//TODO: перестать откладывать на потом

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий