2009-05-01 1 views
2

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

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

Благодаря

ответ

2

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

+0

Я так рад, что вы сказали nvarchar (max) вместо ntext. – DForck42

+1

Любая причина, почему я должен использовать varchar над nvarchar? – Fermin

1

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

0

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

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

+0

ну, это на самом деле помечены для SQLServer. –

3

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

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> тегов, то вы хотите для очистки разметки перед ее хранением. Возможно, вы можете протестировать, используя некоторую онлайн-демонстрацию, а затем нажмите кнопку «Просмотр HTML» в редакторе, хотя тогда вы не узнаете, может ли редактор очищаться при сохранении.

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

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

1

Это зависит от размера HTML, который вы храните и кодирования символов.

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

Если это больше, чем вы можете использовать тип ТЕКСТА.

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

Если вам нужны дополнительные charactersets вы можете также рассмотреть типы Юникода 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: http://en.wikipedia.org/wiki/Cross-site_scripting

Смежные вопросы