Formatting posts using markdown, BBCode, and HTML

:bookmark: This reference guide details all the formatting options available in Discourse posts, including markdown, BBCode, and HTML. It specifies what is supported and provides resources where you can see examples.

:person_raising_hand: Required user level: All users

Understanding supported formatting in posts

While plain text is sufficient for most replies, Discourse allows users to enhance the formatting of their posts by using markdown, BBCode, and HTML. This guide explains what types of formatting are supported and how you can use them effectively.

You can also practice some of the basics in an interactive tutorial by sending a personal message to @discobot here or on any Discourse site.

Summary

This guide covers:

  • Supported markdown syntax
  • Supported BBCode tags
  • Supported and safe HTML tags and attributes

Best practices

  • Use markdown primarily for its simplicity and readability.
  • Mix markdown and BBCode only when necessary, and keep usage consistent.
  • Limit the use of HTML to simple, safe tags to avoid formatting issues and ensure posts are secure.

Supported markdown

Discourse uses markdown-it for its markdown implementation.

Some commonly used markdown features include:

  • Bold: **text**

  • Italic: *text*

  • Link: [title](https://example.com)

  • Inline code: `code`

  • Highlight: <mark></mark>

  • Blockquote: > quoted text

  • Code block:

    ```
    code block
    ```
    

In longer posts (like this one), it can also be helpful to add structure using headings:

# Heading 1
## Heading 2
### Heading 3

Note: when an image is uploaded, the markdown syntax to reference the image will automatically be generated.

![caption|500x500](upload://image.jpeg)

For a full list of markdown features, please refer to the interactive guide.

Supported BBCode

Discourse supports a subset of common BBCode tags, some of which are generated automatically to support special formatting, for example when you quote a post in your reply:

quote="user"\]quoted text\[/quote
[quote="user"]quoted text[/quote]

You can also use BBCode to hide text as a spoiler or as details

spoiled text

[spoiler]spoiled text[/spoiler]
details="click to expand"\]hidden text\[/details
[details="click to expand"]hidden text[/details]

BBCode tags for simple formatting supported by markdown or are also supported:

  • [b]strong[/b]
  • [i]emphasis[/i]
  • [u]underlined[/u]
  • [s]strikethrough[/s]
  • [ul][li]option one[/li][/ul]
  • [img]http://example.com/image.png[/img]
  • [url]http://example.com[/url]
  • [code]code[/code]

For a complete list of supported BBCode tags and examples, check the Discourse BBCode tests.

Supported HTML

Discourse supports a safe subset of HTML. While you can mix HTML with markdown, only specific HTML tags and attributes are allowed to ensure security and consistent styling.

Some of the allowed HTML tags include:

  • <a href="https://example.com">link</a>
  • <strong>bold text</strong>
  • <em>italic text</em>
  • <ul><li>list item</li></ul>
  • <img src="https://example.com/image.png" alt="description">

For a detailed list of allowed HTML tags and attributes, refer to Discourse’s allow-list.

:information_source: Note: Inline styles, like <span style="color:red">colored text</span>, are not supported. For custom styles, see customize post contents.

Common issues and solutions

  • BBCode or HTML tags not working: Ensure the tags you are using are part of the supported subset.
  • Inline styles being stripped: Discourse does not support inline styles for security reasons. Use custom styles or plugins if necessary.
  • Formatting changes on pasting from other editors: Some rich-text formats may not render correctly. Use markdown to format text consistently.

FAQs

Q: Can I use tables in Discourse?
A: Yes, you can use markdown to create tables. For more information, see this guide on tables.

Q: Why isn’t my inline style working?
A: Discourse does not support inline styles in HTML for security reasons. Consider using custom BBCode or the Discourse custom styling guide.

Q: Can I add custom BBCode tags?
A: Yes, you can add custom BBCode tags. Refer to the Discourse BBCode plugin for more information.

Additional resources

Last edited by @renato 2026-01-26T18:46:43Z

Check documentPerform check on document:
31 лайк

Ни одно из этих ссылок не упоминает таблицы.

2 лайка

Это верно, но эта другая тема содержит. Adding a table to your post using markdown

3 лайка

Похоже, что цвет текста и цвет фона текста не работают с <span> или bbcode. Неужели я что-то упускаю?

  • <span style="color:red">какой-то красный текст markdown</span>
    • какой-то красный текст markdown
  • bbcode: [color=red]Текст красного цвета[/color]
    • [color=red]Текст красного цвета[/color]
2 лайка

да, похоже, что встроенные стили HTML не поддерживаются

Вы можете воспользоваться этим руководством:

(И посмотреть его в действии здесь: 📜 [Wiki] Schlumpf hub serial numbers reference - Unicycles and Equipment - Unicyclist.com)

Или используйте этот плагин, который расширяет поддержку BBCode:

Что касается разрешённых HTML-тегов, то, по-моему, это справочник:
https://github.com/discourse/discourse/blob/main/app/assets/javascripts/pretty-text/addon/allow-lister.js#L115

Хотя по какой-то причине я не нахожу там HTML-теги таблиц (которые разрешены).

Возможно, потому что они указаны здесь:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/pretty-text/engines/discourse-markdown/table.js#L31

5 лайков

Спасибо большое за полезные ссылки!

1 лайк

Похоже, что в настоящее время фильтр настроен так, что атрибуты rowspan и colspan для элементов td и th удаляются. Насколько я понимаю, они безопасны (и, по моему мнению, очень полезны): готова ли команда разрешить эти атрибуты?

Кстати, @Canapin упоминал о расположении списка разрешённых тегов table.

Однако файл .../discourse-markdown/table.js, похоже, представляет собой реализацию, ориентированную конкретно на таблицы Markdown; потребуется ли для обычных HTML-таблиц отдельное расширение allowList?

Я считаю, что rowspan и colspan вполне безопасны, но также хотел бы попросить о разрешении ещё одного элемента разметки. Можно ли разрешить атрибуты data-* для элементов таблиц? Я думаю, что это было бы очень полезно для указания различных типов содержимого таблиц, в частности, для использования в качестве крючков для пользовательских CSS-стилей.

1 лайк

Привет :slight_smile:

Думаю, это окажется сложнее, чем ожидалось.
Если вы создадите HTML-таблицу в своём сообщении и кто-то процитирует её, она будет преобразована в Markdown, который не поддерживает rowspan и colspan.

Скорее всего, возникнут и другие проблемы, о которых я сейчас не подумал.

Это не совсем то же самое, но вы можете обернуть свою таблицу в теги [wrap] :slight_smile:
Смотрите: Customize posts' contents with your own styles
Однако вы не сможете использовать атрибуты data-* внутри HTML-таблицы (например, для настройки конкретных строк или ячеек).

редактирование: если ваша таблица использует Markdown вместо HTML, вы можете вставить теги span с атрибутами data-* следующим образом:

|Column 1 | Column 2|
|--- | ---|
|<span data-thing>test</span> | test|
|test | test|

Но они будут удалены, если кто-то процитирует вашу таблицу или скопирует её через буфер обмена.

1 лайк

Было бы очень полезно, если бы простые и безопасные встроенные стили CSS соблюдались в «сыром» HTML, добавляемом в сообщения Discourse. Возможно, речь идет о конвертированных HTML-сообщениях из предыдущего движка форума и/или о том, что пользователи иногда вставляют форматированный текст с такими элементами, как выравнивание текста и/или изображений.

Ниже приведён пример, который работает как ожидалось:


<div align="center">
<p>Test</p>
</div>

Test

А вот этот пример не работает:


<p style="text-align: center;">Test</p>

Test


То же самое касается встроенного форматирования <span style="color: ....

Вероятнее всего, в конвертированном или вставленном содержимом из других WYSIWYG-редакторов чаще встречаются подобные встроенные стили.

Атрибут style в Discourse не разрешён, так как он может легко сломать функциональность.

Кроме того, в Discourse существует определённая философия представления информации в сообщениях, и ограничения тегов и атрибутов применяются намеренно.

Атрибут align для <div> здесь явно разрешён: https://github.com/discourse/discourse/blob/main/app/assets/javascripts/pretty-text/addon/allow-lister.js#LL147C2-L147C16

Если вы планируете мигрировать форум и хотите сохранить некоторые специальные стили, например цвета, рекомендую воспользоваться Discourse BBCode и при необходимости отредактировать импортер :slight_smile:

3 лайка

Есть ли причина, по которой разметка цитат > не включена в раздел Markdown? На мой взгляд, это самое частое упущение, с которым сталкиваются люди, когда должны её использовать.

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

@one1, для цитирования внутри форума это следует discouraging. Его замена там — [quote]. В остальном я согласен.

Я говорил о цитировании из академических работ.

Это невероятно полезно! Большое спасибо! :grinning_face:

Эта ссылка не работает.

2 лайка

Спасибо! Должно быть, это уже исправлено.

1 лайк

8 сообщений были перенесены в новую тему: Использование заголовков H1 и H2 в редакторе