【问题标题】:Telegram does not escape some markdown charactersTelegram 不会转义一些降价字符
【发布时间】:2017-03-30 08:12:57
【问题描述】:

Telegram 不会转义一些 markdown 字符,例如:

  • 这很好用

    _test\_test_

  • 但是这个返回解析错误

    *测试\*测试*

我做错了什么?

【问题讨论】:

标签: markdown telegram-bot


【解决方案1】:
String escapedMsg = toEscapeMsg
    .replace("_", "\\_")
    .replace("*", "\\*")
    .replace("[", "\\[")
    .replace("`", "\\`");

不要转义] 字符。如果[ 被转义,] 将被视为普通字符。

【讨论】:

  • 当前的 Telegram 版本 1.5.6 对我来说效果很好
  • 这在“test_test”之类的文本上失败。例如。它将产生消息“test\_test”。
  • 要转义多个字符,最好使用带有全局标志的正则表达式。
  • 这为我修好了!干杯!
  • 当转义多个点 . 尝试 .replace(/\./g, "\\.") 为我工作
【解决方案2】:

实际上两者都出错了。

{
  "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"
}

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

【讨论】:

  • 这显示粗体字符串test\test,不带'*'。但我想显示粗体test*test...
  • 是的,你是对的。 Telegram 在转义字符方面存在一些问题。我已经编辑了我的答案并提出了另一种方法。也许将此错误报告给电报机器人支持。
【解决方案3】:

唯一的解决方法是在parse_mode 中使用HTML

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

【讨论】:

  • 如此悲伤但真实!
  • 仍需将“
【解决方案4】:

您应该使用'\\' 转义标记标记*_[`,即改为发送此:

*test\\*test*

【讨论】:

  • @Oleg,你错了。您是否尝试过直接在 Insomnia 或其他 REST 工具中或从您的代码中发送此序列?如果您的语言使用 `` 作为转义字符,则必须将其加倍。
  • 它与语言无关,因为 Telegram 本身不支持此功能。对于测试,我使用了 Postman。此外,您可以在 Telegram 文档中找到它们提供了一些 HTML 实体(与转义相同)core.telegram.org/bots/api#markdown-style
【解决方案5】:

使用MarkdownV2

{
    "chat_id": telegram_chat_id,
    "parse_mode": "MarkdownV2",
    "text": "*test\*test*"
}

只需转义这些字符:

'_', '*', '[', ']', '(', ')', '~', '`', '>', '#', '+', '-' , '=', '|', '{', '}', '.', '!'

然后电报将处理其余的。

【讨论】:

    【解决方案6】:

    具有讽刺意味的是,如果 prase_mode 参数设置为 markdown 而不是在 python 中使用 ParseMode.MARKDOWN_V2 常量而不转义任何字符 send_message 函数工作正常。

    【讨论】:

      【解决方案7】:

      pdenti 的回答仅替换消息中的 第一个 字符。使用带有全局标签的正则表达式来替换它们。

      String escapedMsg = toEscapeMsg
          .replace(/_/g, "\\_")
          .replace(/\*/g, "\\*")
          .replace(/\[/g, "\\[")
          .replace(/`/g, "\\`");
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 2013-06-23
      相关资源
      最近更新 更多