Telegram 无法将此特定 URL 作为 link 发送

Telegram cannot send this specific URL as a link

Telegram 不喜欢这个 link 出于某种原因:

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

该程序运行良好,并以这种方式发送各种 link,几乎没有问题。如果我用不同的 link 替换代码中的 link,它发送正常。如果我在 hyperlink 格式之外发送 link,它也可以正常发送。 link 本身工作正常,并打开一个正常运行的网页。但是我真的很想知道为什么电报不允许我超link那个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 在电报中作为 hyperlink 工作,&(可能还有类似的字符?似乎无论如何都可以工作)

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

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

除了显然我不能用 hyperlinked URLs 做到这一点。所以我不逃避他们。

但是还有另一个重要的逃生方法,我没有使用 URLS 但应该使用它。这就是转义所有百分比编码字符

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')

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

所以通常在普通短信中,我转义百分比编码字符,然后转义特殊字符。通常使用我喜欢的 URLs 我根本不会逃脱。我需要做的是对我的网址进行百分比编码转义。

经过更多测试后,我想我明白了。

首先并不是特别的&,而是所有的。那只是第一个出现的。对于 URL 作为电报中的超链接,&(可能还有类似的字符?似乎无论如何都可以工作)

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

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

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

但是还有另一个重要的逃生方法,我没有使用 URLS 但应该使用它。这就是转义所有百分比编码字符

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')

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

所以通常在普通短信中,我转义百分比编码字符,然后转义特殊字符。通常我喜欢的 URLs 我根本不会逃脱。我需要做的是对我的网址进行百分比编码转义。