免费工具
Telegram 文本格式化,转义已经替你做好
消息里有一个价格、一个连字符和一个句号,Bot API 回了一句 "can't parse entities"。MarkdownV2 保留了 18 个字符,而一句普通的话通常就包含其中四五个。在这里写消息,选择粗体、剧透或代码块,复制出来的结果里这些字符已经全部转义。
写下你的消息
选中文本再套用样式,或者自己敲标签。输入框用的是 Telegram 的 HTML 语法,所以你编辑的内容对其中一种输出来说已经是合法的。预览只是消息的样子,不是发送按钮:这里的内容不会离开你的浏览器。
字符数 198 / 4096
已经超过 4096 个字符。Telegram 不会把它当成一条消息收下,请拆开,或者把长的部分放进文件。
Telegram 统计的是可见字符,标记本身不计费。实体和格式标签都不占用这个上限。
Fixed: the CSV import dropped rows ending in a comma.
Reported by three of you on the same day.
Run
npm i -g entergram@2.4 to upgrade.The migration note is boring but mandatory.
MarkdownV2
*Release 2\.4 is out\.* Fixed: the CSV import dropped rows ending in a comma\. >Reported by three of you on the same day\. Run `npm i -g entergram@2.4` to upgrade\. The migration note is ||boring but mandatory||\.
用 parse_mode=MarkdownV2 发送。普通文本里每个保留字符都已转义;在代码片段内部,只有反斜杠和反引号需要转义。
HTML
<b>Release 2.4 is out.</b> Fixed: the CSV import dropped rows ending in a comma. <blockquote>Reported by three of you on the same day.</blockquote> Run <code>npm i -g entergram@2.4</code> to upgrade. The migration note is <tg-spoiler>boring but mandatory</tg-spoiler>.
用 parse_mode=HTML 发送。要转义的东西更少,多数库也因此把它设为默认。
两种 parse mode 的语法
Telegram 接受三种 parse mode。Markdown 是旧的那种,支持四种样式;MarkdownV2 和 HTML 支持全部十种。这张表把 MarkdownV2 和 HTML 并排放在一起。
| 样式 | MarkdownV2 | HTML |
|---|---|---|
| 粗体 | *bold* | <b>bold</b> |
| 斜体 | _italic_ | <i>italic</i> |
| 下划线 | __underline__ | <u>underline</u> |
| 删除线 | ~strike~ | <s>strike</s> |
| 剧透 | ||hidden|| | <tg-spoiler>hidden</tg-spoiler> |
| 行内代码 | `code` | <code>code</code> |
| 代码块 | ```python code ``` | <pre><code class="language-python">code</code></pre> |
| 块引用 | >quoted line | <blockquote>quoted</blockquote> |
| 行内链接 | [text](https://example.com) | <a href="https://example.com">text</a> |
| 自定义表情 |  | <tg-emoji emoji-id="5368324170671202286">👍</tg-emoji> |
在 MarkdownV2 里,下划线和斜体不能直接嵌套,因为 __ 和 _ 在边界上会撞车。同一段文字要同时用这两种样式时,请改用 HTML。
MarkdownV2 为什么一直拒收你的消息
MarkdownV2 保留了十八个字符,在代码实体之外,每一个前面都必须加反斜杠,哪怕它在那个位置根本不可能被当成标记。这份名单是 _ * [ ] ( ) ~ ` > # + - = | { } . !,另外还有反斜杠本身,因为它就是转义字符。
其中两个让几乎所有人栽跟头。句号结束了大多数句子。连字符出现在日期、区间、命令行参数和复合词里。一条写着 "Fixed: the 2.4-rc build" 的发布说明,九个词里有三个保留字符,而 API 会整条拒收,不会把文本原样放过去。
实体内部的规则不一样,这是第二个常见误区。在行内代码或代码块里,只有反斜杠和反引号是特殊的,在那里把其他字符也转义,你的代码里就会出现可见的反斜杠。在链接或自定义表情的圆括号里,特殊的只有右括号和反斜杠。上面的工具会按上下文套用对应的规则,这正是查找替换做不到的部分。
如果这些都让你头疼,那就用 HTML。它只转义三个字符,&、< 和 >,嵌套也没有歧义。选择 MarkdownV2 的唯一理由,是它在版本库里更好读。
4096 字符的上限算的是文本,不算标记
一条 Telegram 文本消息装 4096 个字符。格式是以实体的形式跟在文本旁边传递的,不在文本里面,所以输出里看到的标签、星号和反斜杠都不计入。上面的计数器显示的是可见长度,也就是 Telegram 检查的那个数字。
旁边还有两个上限,动手写发送端之前值得知道。媒体说明文字只装 1024 个字符,所以一条单独发完全没问题的格式化消息,一旦附上图片就会被拒。超出上限的消息不会被截断:API 返回错误,什么都不发。
常见问题
这对频道帖子和普通聊天也适用,还是只适用于机器人?
语法表适用于一切通过 Bot API 或客户端库发送的内容。如果是你自己在 Telegram 里打字,应用有它自己的格式化菜单,你根本看不到 MarkdownV2。这个工具针对的是由别的程序负责发送、需要预先格式化好文本的情况。
该用哪种 parse mode?
没有特别理由的话用 HTML。它要转义三个字符而不是十八个,嵌套行为可预测,出错时通常只是多出一个可见标签,而不是整条消息被拒。MarkdownV2 在源文件里更好读,这是支持它的诚实理由。
消息发出去了,格式却没了,为什么?
几乎都是漏了 parse_mode。没有它,Telegram 会把文本当成字面内容,星号和标签就以字符的形式出现。在发送调用里把 parse_mode 设成 MarkdownV2 或 HTML,和你复制的那份输出保持一致。
能在链接里嵌粗体,或在粗体里嵌斜体吗?
可以,两种 parse mode 都行,只有一个例外:在 MarkdownV2 里下划线和斜体一起用需要绕开写法,因为分隔符会撞车。行内代码和代码块在两种模式下都不能包含任何其他样式。
自定义表情 ID 是什么,从哪里拿?
它是 Premium 自定义表情的数字 ID,要从一条已经包含该表情的消息里读出来,而不是查公开目录。发送方需要 Telegram Premium,或者是拥有该贴纸集的机器人。其他人看到的是你包住的那个备用字符。
我在这里输入的内容会被上传吗?
不会。转换在你的浏览器里完成,这个页面没有发送环节、没有账号、也没有存储。关掉标签页,消息就没了。
继续看看
同样免费: Telegram Group Finder , Telegram Lead Finder , Free QR Code Generator .
如果这段格式是为一条要发给 200 个人的消息准备的
预先转义好的文本只是群发里较小的那一半。较大的一半,是从一个别人真的会回复的账号发出去,控制好节奏让 Telegram 不生疑,再把回复收在手机以外的地方。这一半由 Entergram 负责:用真实的个人 Telegram 账号而不是机器人,每个账号走自己的代理,回复都落在同一个界面里,紧挨着联系人记录。
看看群发是怎么跑的