hostzg.com
科技智变,云启未来!

Telegram Bot 消息格式化详解:MarkdownV2 与 HTML 语法指南

这是一个基于 Telegram Bot API 官方文档编写的指南,详细介绍了如何通过 Bot 发送带有格式(如加粗、链接、代码块等)的消息。

Telegram Bot API 允许开发者发送富文本消息,支持加粗、斜体、代码块、链接预览以及隐藏的“剧透”内容等。为了让客户端正确渲染这些样式,开发者需要在发送消息时指定 parse_mode 字段。

本文将详细介绍三种支持的格式化模式:MarkdownV2(推荐)、HTMLMarkdown(旧版),以及相关的规则和注意事项。


一、 通用规则与特性

在深入具体语法之前,了解以下通用规则非常重要:

1. 支持的样式

Telegram 客户端支持以下基础样式:

  • 加粗、斜体、下划线、删除线
  • 剧透(Spoiler,点击后才显示内容)
  • 引用块(Blockquote)及可展开的引用块
  • 内联链接、内联用户提及
  • 行内代码、预格式化代码块(支持语法高亮)

2. 嵌套规则

样式实体可以相互嵌套,但必须遵守以下限制:

  • 层级关系:如果两个实体有重叠字符,其中一个必须完全包含在另一个内部。
  • 代码限制precode 实体内部不能包含任何其他样式。
  • 通用嵌套:加粗、斜体、下划线、删除线和剧透可以包含除 precode 之外的任何内容,也可以相互包含。
  • 引用块限制blockquoteexpandable_blockquote 彼此不能嵌套。

3. 用户提及 (Mention)

你可以使用 tg://user?id=<user_id> 格式的链接通过 ID 提及用户(无需用户名)。

  • 注意:此类链接仅在内联链接或内联键盘按钮中有效。
  • 隐私限制:除非该用户是当前群组成员,或者曾私聊过 Bot/通过内联按钮互动且未开启转发隐私保护,否则提及可能无法生效。

二、 MarkdownV2 样式(推荐)

这是功能最全的 Markdown 模式,如果要使用 Markdown 语法,请务必使用 MarkdownV2

1. 语法参考

parse_mode 设置为 MarkdownV2

样式语法示例
加粗*text*
斜体_text_
下划线__text__
~~删除线~~~text~
链接[text](URL)
用户提及[text](tg://user?id=123456789)
行内代码`text`
代码块text
引用块>text
可展开引用块**>text (注意与上一行需用空的加粗实体分隔)

2. 重要:转义规则 (Escaping)

MarkdownV2 对转义要求非常严格。

  • 任何 ASCII 码在 1 到 126 之间的字符都可以通过前置 \ 进行转义。
  • 字符 \ 本身必须转义为 \\

必须转义的场景:

  1. precode 内部:只有 `\ 需要转义。
  2. 在链接 (...) 部分内部:只有 )\ 需要转义。
  3. 在其他所有地方,以下字符必须加 \ 转义:_, *, [, ], (, ), ~, `, >, #, +, -, =, |, {, }, ., !

3. 常见陷阱

  • 下划线歧义:解析器会贪婪匹配 __ 为下划线。如果你想写“斜体紧接下划线”(如 ___italic underline___),会导致错误。解决方法是插入一个空的加粗实体进行分隔:___italic underline_**__

三、 HTML 样式

如果你更习惯 Web 开发,HTML 模式是很好的选择。

1. 语法参考

parse_mode 设置为 HTML

样式标签示例
加粗<b>text</b><strong>text</strong>
斜体<i>text</i><em>text</em>
下划线<u>text</u><ins>text</ins>
~~删除线~~<s>text</s>, <strike>text</strike>, <del>text</del>
链接<a href="URL">text</a>
行内代码<code>text</code>
代码块<pre>text</pre>
特定语言代码块<pre><code class="language-python">...</code></pre>
引用块<blockquote>text</blockquote>
可展开引用块<blockquote expandable>text</blockquote>

2. HTML 转义规则

由于使用了 <> 作为标签,非标签内容的特殊字符必须替换为 HTML 实体:

  • < 替换为 &lt;
  • > 替换为 &gt;
  • & 替换为 &amp;

注意:API 仅支持上述列表中的标签,不支持其他 HTML 标签(如 h1, br 等,换行请直接使用 \n)。


四、 Markdown 样式(旧版/Legacy)

注意:这是为了向后兼容保留的模式。它支持下划线、删除线、剧透、引用块等新特性,且不支持嵌套。建议新开发均使用 MarkdownV2

1. 语法简述

parse_mode 设置为 Markdown

  • 加粗:*text*
  • 斜体:_text_ (注意不能像 V2 那样用 ~__)
  • 代码:`text`block
  • 链接:[text](url)

2. 局限性

  • 不可嵌套:你不能在加粗文字里放斜体。
  • 转义不同:在实体外部,只有 _, *, `, [ 需要转义。在实体内部不允许转义(这意味着你无法在斜体文字中显示下划线字符,除非先结束斜体再重新开启)。

五、 自定义 Emoji (Custom Emojis)

如果 Bot 拥有者购买了 Telegram Premium,或者 Bot 在 Fragment 购买了额外的用户名,Bot 可以在消息中使用自定义 Emoji。

  • MarkdownV2: ![👍](tg://emoji?id=5368324170671202286)
  • HTML: <tg-emoji emoji-id="5368324170671202286">👍</tg-emoji>

说明:必须提供一个替代的普通 Emoji(如上例中的 👍),以便在不支持自定义 Emoji 的地方(如系统通知)或非会员转发时显示。


总结建议

  1. 首选 MarkdownV2:功能最强大,支持所有新特性。但要注意其严格的转义规则(尤其是标点符号 .! 等)。
  2. 备选 HTML:如果你觉得 MarkdownV2 的转义太繁琐,HTML 是更稳定且易于阅读的选择,特别是对于复杂的文本结构。
  3. 弃用旧版 Markdown:除非维护旧代码,否则不要使用 Legacy Markdown。
赞(2) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Telegram Bot 消息格式化详解:MarkdownV2 与 HTML 语法指南》
文章链接:https://hostzg.com/6900.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

主机中国网 - 科技智变,云启未来!

HOSTZG 是一个专注于VPS主机资讯、测评与推荐的平台。我们致力于为用户提供全球优质VPS主机的最新信息、详细测评和实用推荐,帮助用户找到最适合的服务器解决方案。无论您是个人用户还是企业用户,HOSTZG 都能为您提供专业、可靠的主机资讯服务。

腾讯云阿里云

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫