Хранить разметку HTML, введенную с помощью веб-редактора? - PullRequest
2 голосов
/ 01 мая 2009

В настоящее время я работаю над разделом администратора для веб-сайта. Администратор может использовать инструмент InfraHistics WebHtmlEditor для создания разметки для страниц, которые затем будут загружаться в загружаемые страницы.

Как лучше всего хранить эту разметку в базе данных? Должны ли мы просто сохранить HTML, сгенерированный WebHtmlEditor, в поле varchar? Есть ли проблемы с этим, например, Будет ли потеряна разметка или возникнут проблемы с БД?

Спасибо

Ответы [ 5 ]

3 голосов
/ 02 мая 2009

SQL не проблема, но если администратору разрешено вставлять из Word, вам нужно очистить разметку перед ее сохранением. Я не знаю WebHtmlEditor , но вы можете легко проверить: если при вставке из Word получаются такие вещи, как

style="mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; 
  mso-fareast-language: EN-US; mso-bidi-language: AR-SA; 
  mso-bidi-font-family: 'Times New Roman'; mso-highlight: yellow"

или

<p class="MsoNormal"> .. </p><o.p></o.p>

или много дополнительных тегов <span> и <div>, тогда вы захотите очистить разметку перед ее сохранением. Возможно, вы можете протестировать с помощью некоторой онлайн-демонстрации, а затем щелкнуть какую-нибудь кнопку View HTML в редакторе, хотя тогда вы не будете знать, может ли редактор очиститься после сохранения.

Обратите внимание, что браузеры по-разному реагируют на вставку из Word, поэтому, если вы используете WebHtmlEditor для очистки, вам может потребоваться тестирование с использованием нескольких различных браузеров.

Некоторые редакторы форматированного текста предлагают специальную кнопку «Вставить из Word», но она может фактически действовать как «Вставить как обычный текст», после чего ваш администратор может прекратить ее использовать ... (И, конечно, ваш администратор может просто забудьте использовать его, поэтому требуется очистка, даже если такая кнопка существует.)

2 голосов
/ 02 мая 2009

Просто сохраните его прямо в вашей базе данных и обратите внимание на его тип и длину. Вы можете обнаружить, что это должен быть столбец nvarchar (max). Никакая разметка не должна быть потеряна при условии, что вы не проводите никаких преобразований между получением значения из элемента управления и передачей в БД.

1 голос
/ 02 мая 2009

Это зависит от размера хранимого HTML-кода и кодировки символов.

Поскольку этот пост помечен SQL Server, текущий VARCHAR (MAX) составляет 8000 символов.

Если это не так, вы можете использовать тип ТЕКСТ.

Существуют каваеты с полями TEXT, поскольку они ограничивают возможность использования запросов с LIKE, проблемы с UNION, Replication и другими.

Если вам нужны расширенные наборы символов, вы также можете рассмотреть юникод-типы NVARCHAR и NTEXT, но они занимают в два раза больше памяти, чем VARCHAR и TEXT, поскольку они используют 2 байта на символ вместо 1.

Если какой-либо из этих материалов вводится пользователями, вы должны быть очень осторожны с атаками XSS-инъекций, которые практически невозможно остановить, как только вы начнете разрешать HTML от своих пользователей.

VARCHAR: http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx Текст: http://msdn.microsoft.com/en-us/library/aa260619(SQL.80).aspx

XSS Attack: http://en.wikipedia.org/wiki/Cross-site_scripting

1 голос
/ 01 мая 2009

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

0 голосов
/ 01 мая 2009

База данных будет хранить необработанные данные, которые ей даны. С этого момента не нужно ничего делать, вы можете просто вывести HTML и все, что хранится в этом поле varchar, на страницу HTML, и все будет работать нормально.

Не забудьте вызвать mysql_real_escape_string (); (или эквивалент вашего языка) для значения post вывода WebHtmlEditor перед тем, как поместить его в базу данных, чтобы гарантировать, что он не вызовет никаких ошибок в запросе SQL.

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