Markdown или HTML

У меня есть требование для пользователей создавать, изменять и удалять свои собственные статьи. Я планирую использовать редактор WMD, который SO использует для создания статей.

Из того, что я могу собрать, SO хранит уценку и HTML. Почему он это делает - в чем польза?

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

UPDATE:

Хорошо, я думаю, что из ответов до сих пор я должен хранить как уценку, так и HTML. Это кажется крутым. Я также читал сообщение в блоге от Джеффа относительно эксплойтов XSS. Поскольку редактор WMD позволяет вводить любой HTML-код, это может вызвать у меня головные боли.

Входящее сообщение в блоге здесь. Я предполагаю, что мне придется придерживаться того же подхода, что и SO, и дезинформировать входные данные на стороне сервера.

Является ли код санитизации, который SO использует в качестве открытого источника, или мне нужно начинать с нуля?

Любая помощь будет высоко оценена.

Спасибо

Ответ 1

Хранение обоих является чрезвычайно полезным/полезным с точки зрения производительности и совместимости (и, в конечном итоге, социального контроля).

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

Если вы храните только HTML, тогда вы рискуете, что ошибки сработают в генерируемом HTML. Это приведет к большому количеству обслуживания и исправлению головной боли. Вы также потеряете социальный контроль, потому что вы больше не знаете, что пользователь действительно заполнил. Например, вы как администратор также знаете, какие пользователи пытаются использовать XSS с помощью <script> и так далее. Кроме того, enduser не сможет редактировать данные в формате Markdown. Вам нужно будет преобразовать его из HTML.

Чтобы обновить HTML при каждом изменении версии Markdown, вы просто добавляете одно дополнительное поле, представляющее версию Markdown, используемую для генерации вывода HTML. Всякий раз, когда это было изменено на стороне сервера в момент получения строки, повторно проанализируйте данные с помощью новой версии и обновите строку в БД. Это только одноразовые дополнительные расходы.

Ответ 2

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

Ответ 3

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