Разрыв строки в текстовой области - PullRequest
1 голос
/ 31 марта 2012

Я пишу форму, используя php, форма имеет текстовое поле, а данные отправляются в скрипт с помощью $_POST; затем сохраняется в БД. Проблема заключается в том, что когда текстовое поле заполнено, и если пользователь не нажимает клавишу ввода, чтобы сделать разрыв новой строки, но он ждет до конца ширины текстовой области, текст, сохраненный в БД, находится в одной строке, например, если он пишет:

Привет, это текст, и он покрывает всю ширину TE XTAREA.

Это даже в том случае, если при достижении максимальной ширины текстового поля текст переходит в новую строку. когда я печатаю сообщение с запросом, результат все в одной строке (что портит мой макет сайта)

Мне удалось записать пользовательские штрихи ENTER, используя этот код:

$cleaned_message=str_replace(Chr(13),'<br>', $cleaned_message);

Но я не могу понять, что делать, если он не использует клавишу ВВОД.

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Если пользователь не использует клавишу Enter (и не вставляет разрывы строк, например, копируя и вставляя текст, содержащий разрывы строк), то в данных нет реальных разрывов строк, которые хранятся в DOM икак представлено в форме данных.Браузеры делят текст на несколько строк по мере необходимости, чтобы привести его в соответствие, но разрывы строк «мягкие», просто визуальный рендеринг.

Введенные пользователем разрывы строк передаются в виде пар CR, LF (возврат каретки,Linefeed).В кодировке данных формы по умолчанию это означает %0D%0A.Что вы делаете с ними, зависит от контекста.Разрывы строк могут быть сохранены и интерпретированы как разрывы абзацев или значимые разрывы строк (например, в почтовых адресах, стихах и компьютерном коде), или они могут быть заменены пробелами.

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

Однако, если элемент textarea имеет атрибут (нестандартный) wrap=hard, то браузерсозданные разрывы строк становятся настоящими разрывами строк (и они неотличимы от введенных пользователем разрывов строк).Атрибут wrap=off предотвращает автоматическое перенос: строка может быть произвольно длинной, а горизонтальная прокрутка появляется при необходимости.

1 голос
/ 31 марта 2012

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

Скорее всего, нарушен ваш макет.Попробуйте определить ширину выходного элемента (я думаю, это тоже текстовая область), поэтому вывод обернут в элемент, а не в элемент, настроенный на вывод.

Не могли бы вы обновить свой пост частьюмакет, где напечатан результат?

...