【发布时间】:2021-06-27 08:46:43
【问题描述】:
Telegram 出于某种原因不喜欢此链接:
对于我的一个项目,我使用电报发送有关新闻文章的消息。这是我的程序创建的一条消息。我正在使用 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