Как сохранить пользовательское форматирование текста, введенного в HTML-форму и сохраненного в базе данных MYSQL? - PullRequest
2 голосов
/ 03 ноября 2010

У меня есть веб-сайт, на котором пользователь вводит текст в HTML-форму. Природа контента такова, что пользователь, вероятно, захочет написать несколько абзацев. В настоящее время форма отправляет текст через POST в файл PHP, который вставляет текст в базу данных. На другой странице текст извлекается из базы данных и отображается. Когда он отображается, все пользовательское форматирование исчезло. Несколько пробелов и разрывов строк удаляются. Как я могу сохранить форматирование пользователя? Поручить ему использовать HTML-теги для форматирования невозможно по нескольким причинам. Я также рассмотрел <pre> тег, но это создает разметку длинных строк текста и изменяет шрифт.

Любая помощь очень ценится.

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Я предполагаю, что вы имеете дело только с набором простого текста, введенного в текстовую область, а не с каким-то необычным редактором HTML, как предполагал другой автор.

Причина, по которой ваши разрывы строк теряются, заключается в том, что HTML не рассматривает разрывы строк как разрывы строк. Разрывы строк рассматриваются как просто еще один пробел. Только <br> рассматривается как разрыв строки. (Или <br /> в XHTML) Если это то, что происходит, вы можете использовать функцию nl2br() для преобразования всех разрывов строк в <br>.

Несколько пробелов сложнее. HTML не различает один пробел и много пробелов. Пробелы, табуляции, разрывы строк или любая их комбинация, это не имеет значения, все это рассматривается как один пробел. Один из способов предотвратить это - обернуть все это в блок <pre> или <code>. Но это ужасно, если вы не пытаетесь отобразить компьютерный код.

Или, если вы действительно отчаянно нуждаетесь в этих дополнительных пробелах, вы можете заменить все пробелы на &nbsp;, что заставляет веб-браузеры отображать лишние пробелы. (См. Правку ниже.)

Редактировать: Окончательная версия, которая сохраняет разрывы строк и несколько пробелов, а также предотвращает XSS:

<?php echo nl2br(str_replace('  ', ' &nbsp;', htmlspecialchars($text))); ?>
2 голосов
/ 03 ноября 2010

Вы можете использовать редактор форматированного текста (TinyMCE, CKEditor) в начальной форме, который позволит пользователю создавать разметку без необходимости знать, как писать HTML.

Затем вы сохраняете отправленную разметку в вашей БД (при желании фильтруя ее для нежелательной разметки / создания сценариев).

При отображении не используйте htmlspecialchars / htmlentities, так как вы хотите, чтобы содержимое интерпретировалось как HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...