Зачем мне уценка? - PullRequest
       12

Зачем мне уценка?

11 голосов
/ 26 января 2010

Зачем мне нужна Markdown с передним редактором редактирования, например WMD ? Что делает уценка с контентом, отправленным из редактора ОМУ?
Как Markdown хранит контент в бэкэнде? Это так же, как *bold* или в каком-то другом формате? Почему я не могу просто сделать кодировку html ?

Извините, если я звучал очень наивно.

Ответы [ 4 ]

35 голосов
/ 05 февраля 2010

diagram

13 голосов
/ 26 января 2010

Вероятно, полезно сделать шаг назад и задать некоторые более крупные вопросы.Проблема, которую пытается решить Markdown, - это богатое редактирование в браузере.Подумайте об этом: в какой-то момент для любого программного обеспечения, позволяющего использовать расширенный текст, оно должно каким-то образом описывать богатство, как бы то ни было.

Мы можем назвать это описание богатства (описанием богатства).Я имею в виду, что «этот бит текста выделен жирным шрифтом» или «этот бит текста является гиперссылкой), мы могли бы назвать это описание богатства« разметкой »- оно помечает текст мета« богатством ».

Реализации форматированного текста могут использовать два подхода: а) скрыть разметку от пользователя или б) предоставить им доступ к разметке.

Для тех, кто хочет скрыть ее, конечный результаточень часто WYSIWYG. Пользователь не замечает, что происходит за кулисами. Редактор заботится о деталях. В качестве примера рассмотрим MS Word. Никто не манипулирует форматом разметки Word как обычный конечный пользователь.

Для реализаций, которые выбирают выставлять разметку, тогда язык разметки позволяет пользователям взаимодействовать с ним.например, HTML делает <tag> или BB-код, например [tag].

Markdown - один из таких языков.

В отличие от предыдущих типов, которые я упоминалMarkdown попытался спроектировать себя так, чтобы разметка отображала обычные ASCII, которые люди уже используют.Например, люди обычно отмечают звездочкой свой текст, чтобы отключить его, *important*, и эта запись в Markdown является индикатором курсива.

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

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

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

3 голосов
/ 03 февраля 2010

Причиной использования альтернативной системы кодирования, отличной от HTML, является безопасность

Markdown и другие подобные системы кодирования в вики-стиле обычно не поддерживают языки сценариев

HTML поддерживает языки сценариев разными способами (

Две основные проблемы безопасности:

  1. Злоумышленники-злоумышленники используют сценарии в сгенерированном пользователем контенте для попытки действий вредоносного ПО на компьютере со считывателем контента с помощью сценариев для доступа к известным дырам в безопасности

  2. Свободные загрузчики, использующие сценарии для подрыва остальной части сайта путем изменения фрейма контента или стилей, т. Е. Рекламы, меню, логотипов и т. Д. Это также может быть преступным поведением, если не просто раздражать

Используя промежуточный язык, такой как Markdown, вы получаете полный контроль над обработанным выводом

Фильтрация HTML возможна, но она также сложна и рискованна

Другая существенная причина для альтернативной системы кодирования - применение стиля. Нормальный HTML имеет слишком много опций. Ограничивая доступные параметры, пользователи могут использовать только определенные стили. Обычно делает для более чистого и читаемого контента (сравните SO с Ebay)

3 голосов
/ 26 января 2010

Основная причина использования Markdown - читабельность помеченного текста. Например, вы можете отправить его в текстовом электронном письме, и читатель все равно поймет акцент, пули, текст будет разделен на параграфы и так далее.

Когда вы спрашиваете о хранении данных, это зависит. Если вы включите Markdown в движке блогов WordPress, он будет хранить данные в том виде, в котором их вводил пользователь - в Markdown. Однако при переполнении стека кажется, что данные хранятся в формате HTML. По крайней мере, «дампы переполнения стека» содержат HTML, а не Markdown (я видел людей, жалующихся ), что они должны преобразовать его обратно).

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

Еще одна причина использования Markdown вместо элемента управления WYSIWIG - элемент управления WYSIWIG позволяет пользователю использовать HTML в данных, отображаемых на веб-странице. Таким образом, вы должны быть тем, кто решает, когда есть просто неправильный HTML и когда он является злым XSS / CSRF / любой инъекции. В Markdown вы просто конвертируете * что-то * в <b>something</b>, удаляете все неизвестные элементы HTML, и все готово.

...