【问题标题】:Telegram cannot send this specific URL as a linkTelegram 无法将此特定 URL 作为链接发送
【发布时间】:2021-06-27 08:46:43
【问题描述】:

Telegram 出于某种原因不喜欢此链接:

https://reuters.com/world/uk/pressure-builds-uks-johnson-fire-health-secretary-2021-06-26/?taid=60d6f3a8b9a1150001df150c&utm_campaign=trueAnthem:+Trending+Content&utm_medium=trueAnthem&utm_source=twitter

对于我的一个项目,我使用电报发送有关新闻文章的消息。这是我的程序创建的一条消息。我正在使用 Mardownv2 消息类型并使用 python 中的请求来发送它们。

[2\) UK health minister quits after breaking COVID rules by kissing aide](https://reuters.com/world/uk/pressure-builds-uks-johnson-fire-health-secretary-2021-06-26/?taid=60d6f3a8b9a1150001df150c&utm_campaign=trueAnthem:+Trending+Content&utm_medium=trueAnthem&utm_source=twitter)

应该显示为:

2) UK health minister quits after breaking COVID rules by kissing aide

该程序运行良好,并以这种方式发送各种链接,几乎没有问题。如果我用不同的链接替换代码中的链接,它发送正常。如果我将链接发送到超链接格式之外,它也可以正常发送。该链接本身可以正常工作,并打开一个正常运行的网页。但是对于为什么电报不允许我超链接该 URL,我真的很摸不着头脑,我想在未来证明我的程序不会再次发生这种事情,尤其是在我没有意识到的情况下

编辑:在进行了更多测试并发送了许多不同的消息以确定原因之后,违规字符似乎是 https://reuters.com/world/uk/pressure-builds-uks-johnson-fire-health-secretary-2021-06-26/?taid=60d6f3a8b9a1150001df150c 中的 & & utm_campaign=trueAnthem:+Trending+Content&utm_medium=trueAnthem&utm_source=twitter

edit2:在做了更多测试之后,我想我想通了。

首先,它并不是特别的 &,而是全部。那只是第一个出现的。对于在电报中用作超链接的 URL,&(可能还有类似的字符?似乎仍然有效)

所以通常当我用电报发送消息时,我需要用这个转义所有特殊字符:

message_body = re.sub(r"([_*\[\]()~`>\#\+\-=|\.!{}])", r"\\\1", message_body)

显然我不能用超链接的 URL 做到这一点。所以我不会逃避他们。

但还有另一个重要的转义,我没有使用 URL,但应该这样做。这就是转义所有百分比编码字符

message_body=message_body.replace('%', '\\%25')
message_body=message_body.replace('#', '\\%23')
message_body=message_body.replace('+', '\\%2B')
message_body=message_body.replace('*', '\\%2A')
message_body=message_body.replace('&', '\\%26')

将这些行添加到我的网址解决了我的问题!

所以通常在普通短信中,我先转义百分比编码字符,然后转义特殊字符。通常对于我喜欢的 URL,我根本不会转义。我需要做的是也为我的网址做百分比编码转义。

【问题讨论】:

  • 您能举一个有效的网址示例吗?该正斜杠是否应该在第一个查询之前存在?
  • 也可能是那个冒号。是查询字符串中的支持吗?
  • @Bevan 正斜杠旨在转义数字 2 之后的 ) ,以便 ) 在消息中显示为文本。但是在解决它之后,似乎带有 & 的 URL 是罪魁祸首

标签: markdown telegram telegram-bot python-telegram-bot


【解决方案1】:

在做了更多测试之后,我想我想通了。

首先,它并不是特别的 &,而是全部。那只是第一个出现的。对于在电报中用作超链接的 URL,&(可能还有类似的字符?似乎仍然有效)

所以通常当我用电报发送消息时,我需要用这个转义所有特殊字符:

message_body = re.sub(r"([_*\[\]()~`>\#\+\-=|\.!{}])", r"\\\1", message_body)

显然我不能用超链接的 URL 做到这一点。所以我不会逃避他们。

但还有另一个重要的转义,我没有使用 URL,但应该这样做。这就是转义所有百分比编码字符

message_body=message_body.replace('%', '\\%25')
message_body=message_body.replace('#', '\\%23')
message_body=message_body.replace('+', '\\%2B')
message_body=message_body.replace('*', '\\%2A')
message_body=message_body.replace('&', '\\%26')

将这些行添加到我的网址解决了我的问题!

所以通常在普通短信中,我先转义百分比编码字符,然后转义特殊字符。通常对于我喜欢的 URL,我根本不会转义。我需要做的是也为我的网址做百分比编码转义。

【讨论】:

    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-03-11
    • 2022-08-12
    • 2015-09-30
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多