电报不会逃脱某些降价字符

use*_*979 8 markdown telegram-bot

电报不会逃避某些降价字符,例如:

  • 这很好用

    _测试一下_

  • 但是这个返回解析错误

    *测试一下*

我做错了什么?

Ole*_*leg 11

唯一的解决方法是HTMLparse_mode

https://core.telegram.org/bots/api#html-style

  • 仍然需要将“<”替换为“<” 因为它将被读取为标记开始并且可能无法识别 (3认同)

Sta*_*nko 11

根据电报 API

In all other places characters '_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-', '=', '|', '{', '}', '.', '!' must be escaped with the preceding character '\'.

所以这是我用过的函数

text
  .replace(/\_/g, '\\_')
  .replace(/\*/g, '\\*')
  .replace(/\[/g, '\\[')
  .replace(/\]/g, '\\]')
  .replace(/\(/g, '\\(')
  .replace(/\)/g, '\\)')
  .replace(/\~/g, '\\~')
  .replace(/\`/g, '\\`')
  .replace(/\>/g, '\\>')
  .replace(/\#/g, '\\#')
  .replace(/\+/g, '\\+')
  .replace(/\-/g, '\\-')
  .replace(/\=/g, '\\=')
  .replace(/\|/g, '\\|')
  .replace(/\{/g, '\\{')
  .replace(/\}/g, '\\}')
  .replace(/\./g, '\\.')
  .replace(/\!/g, '\\!')
Run Code Online (Sandbox Code Playgroud)

但请记住,这意味着如果您打算使用*某些文本*作为粗体文本,此脚本将渲染*某些文本*而不应用粗体效果

  • 是的,使用捕获组代替哈哈 `text.replace(/([|{\[\]*_~}+)`(#>!=\-.])/gm, '\\$1');` (3认同)

pde*_*nti 7

String escapedMsg = toEscapeMsg
    .replace("_", "\\_")
    .replace("*", "\\*")
    .replace("[", "\\[")
    .replace("`", "\\`");
Run Code Online (Sandbox Code Playgroud)

不要逃避]性格.如果[被转义,]则被视为普通字符.

  • 当转义多个点 `.` 时,尝试 `.replace(/\./g, "\\.")` 对我有用 (2认同)
  • 还有很多符号需要替换。尝试发送整个 ASCII 符号进行测试。如果无法控制消息内容,最好使用 ParseMode.HTML (2认同)

Vah*_*Msm 5

实际上两者都出现错误。

{
  "ok": false,
  "error_code": 400,
  "description": "Bad Request: Can't parse message text: Can't find end of the entity starting at byte offset 11"
}
Run Code Online (Sandbox Code Playgroud)

听起来 Telegram 不支持 Markdown 的转义字符,所以我建议你改用 HTML: <b>test*test</b>