azorr
@azorr
программирую по мере возможности..

Как вывести текст в textarea не потеряв переносы строк в тексте?

Нужно вывести текст в textarea из SQL, не потеряв при этом переносы в тексте.
Что делал:
ВАРИАНТ 1-Й


1 - пишу абзац текста с переносами в textarea

Мама мыла
раму чисто
и быстро!


2 - Отправляю в SQL-базу

3 - Читаю из SQL-базы обратно в textarea

И имею ошибку в консоли:

Uncaught SyntaxError: '' string literal contains an unescaped line break

Скриншот фрагмента кода удален модератором.

Зато абзац текста выводится в textarea как надо, с переносами

Мама мыла
раму чисто
и быстро!


Вариант с красной ошибкой в консоли конечно НЕ вариант

ВАРИАНТ 2-Й

1 - Заново набираю абзац текста в textarea с переносами

Мама мыла
раму чисто
и быстро!


2 - Меняю спец-символы переноса \n \r на HTML-сущности

вот так:

$var_zametka = addslashes($var_zametka);

2 - Отправляю в SQL-базу

3 - Читаю из SQL-базы обратно в textarea

НЕТ ошибки в консоли:
Но, абзац текста выводится в textarea с недостатками:

- переносы исчезли
- текст выводится с html-сущностями
- и еще слитной колбасой..

Мама мыла\r\nраму чисто\r\nи быстро!

Переносы утрачены

>можно тут почистить эти сущности \n\r, но будут только пробелы вместо переносов..

Разные очистки пробовал:

$var_zametka = str_replace ('\r\n', '\n', $var_zametka);

$var_zametka = nl2br(htmlspecialchars($var_zametka));

$var_zametka = html_entity_decode($var_zametka);

$var_zametka = html_entity_decode($var_zametka, ENT_QUOTES | ENT_HTML5, 'UTF-8');


ВАРИАНТ 3-Й
1 - пишу абзац текста с переносами в textarea

Мама мыла
раму чисто
и быстро!


2 - Отправляю в SQL-базу НЕ МЕНЯЯ на HTML-сущности

3 - Оригинальные системные переносы сохраняются в SQL - базе

4 - лезу руками в SQL-базу, меняю

«Переносы как в Windows»

6337650022e4f644027924.jpeg

на
«Переносы как в Unix»

633765190c6ed389778996.jpeg

5 - Читаю из SQL-базы обратно в textarea

НЕТ ошибки в консоли:

Абзац текста выводится в textarea так:

Мама мыла‧раму чисто‧и быстро!

- вместо переносов — точки!
- и опять слитной колбасой..
- ну и руками в SQL лазить как бы вообще не надо это чтоб понять механику..

  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ответы на вопрос 1
Fockker
@Fockker Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
ВАРИАНТ 4-Й, очевидный
1 - пишу абзац текста с переносами в textarea
2 - Отправляю в SQL-базу ничего не меняя.
3 - Оригинальные системные переносы сохраняются в SQL - базе, как и должны, поскольку любые заморочки с яваскриптами к базе данных не имеют вообще никакого, ни малейшего отношения
4 - Читаю из SQL базы
5 - Вывожу в обратно в texarea
6 - В texarea ВСЁ РАБОТАЕТ! A magic! При том что мы вообще нигде ничего ни на что не меняли

6a - По поводу HTML сущностей. Хотя в приведённом примере нет ни одного символа, который бы требовал перекодирования в HTML-сущности, тем не менее, при выводе любого текста в HTML, эти сущности действительно должны быть перекодированы в обязательном порядке, всегда, в 100% случаев. Причем с помощью не какой-то левой addslashes, а функции, которая действительно это делает, htmlspecialchars($var_zametka)

7 - Собираюсь с мыслями, и напряжённо думаю - в каком месте у меня текст взаимодействует с яваскриптом? Который к выводу текста в текстарию не имеет ни малейшего отношения?
8 - думаю...
9 - думаю...
10 - наконец-то нахожу.
11 - перед тем, как отправлять текст в яваскрипт, кодируем его тем методом, который специально предназначен для отправки данных в яваскрипт, а не какими-то шаманскими заклинаниями и плясками с бубном.echo json_encode($var_zametka)
12 - ВСЁ РАБОТАЕТ! Просто потому, что получилось расхлебать кашу в голове, в которой SQL путается с РНР, HTML c яваскриптом, а экранирование спецсимволов почему-то называется заменой на HTML-сущности. Хотя если открыть документацию на абсолютно бесполезную функцию addslashes, то там ни одного разочка слово HTML не встретится.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 окт. 2022, в 20:34
20000 руб./за проект
01 окт. 2022, в 19:19
1000 руб./за проект
01 окт. 2022, в 19:05
30000 руб./за проект