Python:格式化字符串,使其在标记或HTML中显示为纯文本?

Python:格式化字符串,使其在标记或HTML中显示为纯文本?,python,html,format,markdown,telegram,Python,Html,Format,Markdown,Telegram,我正在使用电报机器人从Python程序发送消息。电报要求您发送的所有bot消息都采用降价或HTML格式 我只希望Python程序中的字符串在电报消息的接收端以完全相同的方式显示 问题是,我试图发送的文本来自公众,所以它可能是任何东西,包括在这些格式中具有含义的特殊字符,这会完全破坏消息 是否有一种方法可以将此消息字符串格式化为其中一种格式,使其在另一端显示为纯文本 编辑:我已经尝试了很多方法。正如mmiron所建议的,我尝试将字符串转义为html,但我一直无法开始工作。似乎发生的情况是,特殊(,

我正在使用电报机器人从Python程序发送消息。电报要求您发送的所有bot消息都采用降价或HTML格式

我只希望Python程序中的字符串在电报消息的接收端以完全相同的方式显示

问题是,我试图发送的文本来自公众,所以它可能是任何东西,包括在这些格式中具有含义的特殊字符,这会完全破坏消息

是否有一种方法可以将此消息字符串格式化为其中一种格式,使其在另一端显示为纯文本

编辑:我已经尝试了很多方法。正如mmiron所建议的,我尝试将字符串转义为html,但我一直无法开始工作。似乎发生的情况是,特殊(,#)字符完全破坏了消息,即使我将它们替换为字符引用,如
&

我还尝试将字符串转义为Markdown,结果非常奇怪。与HTML不同,使用标记似乎更可能实际发送文本,但特殊字符(尤其是#)似乎会破坏结果

以下是带有标记的起始文本

>>Bravo: Priyanka Chopra, Navya Naveli Nanda praise Jharkhand girl who got #Harvard University scholarship https://url
"Educate a girl you can change the whole community"
- - - - - - - - - - - - - - - - - - - - - -
Sunchartist
(@sunchartist)
                                                     j1.1
- - - - - - - - - - - - - - - - - - - - - -
9:09PM +43seconds    23-4-2021
[Chopra]
(Balance: $3.43)
-----------------------------------
<https://twitter.com/sunchartist/status/1385777945248030723>
-----------------------------------
<https://www.url.com>
第一个<出现在链接之前的原始文本中

<https://www\.url\.com\>

这很奇怪,因为出于某种原因,它似乎只适用于[]或[]中的开头字符,而不适用于结尾字符

我也尝试过使用HTML标志使用
进行包装,但除了在电报发送时更改文本颜色外,这似乎没有任何效果,只有在我删除了有问题的特殊字符后才会这样做

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')
如果在文本中的任何一点上有一个hashtag(#),它似乎只发送到hashtag前面的文本,但在它后面没有。出于某种原因,这对于标记和html都是正确的

导入html
escape=html.escape(外部输入字符串)

然后将转义的
作为HTML发送。另请参见

好的,我终于解决了它。张贴在这里供将来参考

我无法让HTML工作,所以我仍然不确定

首先,我的parse_mode=Markdown需要是parse_mode=MarkdownV2

接下来,使用\运算符可以将一些特定字符显示为文字。相反,您需要使用来保留这些符号

下面是我用来修复该部分的代码

    message_body = re.sub(r"([_*\[\]()~`>\#\+\-=|\.!{}])", r"\\\1", message_body)
哪个修复了%、#、+。。。我可能会让它更优雅/更快,但现在可以了

最后,还有一组字符,\运算符为其创建文字。这是我用来修复这些问题的代码


由于某种原因,当我尝试这个时,我得到了。执行此操作时,{'ok':False,'error_code':400,'description':'Bad Request:消息文本为空'}。尽管“转义”变量是一个长字符串,但我可以打印出
,API目前只支持以下命名HTML实体:,&;及“
尝试用
包装您的邮件标签。似乎越来越近了,因为玩游戏实际上让我发送和接收一条消息,这是我以前无法做到的。然而,这并没有解决它。只有删除了诸如>、<和#之类的冒犯性字符,我才能让它发送。如果我完全按照您描述的那样做,那么响应是{'ok':False,'error_code':400,'description':“错误的请求:无法解析实体:找不到与开始标记pre相对应的结束标记”}它至少似乎确认了第一个,但由于某些原因,没有确认第二个。您将
/
包含在关闭标记中,对吗?打开的是
,关闭的是
。是的,我是:new_text=“”。加入(['',original_text=“])如果您不需要任何其他样式,如粗体或链接,您可以将文本作为代码发送,因此周围有3个反勾。
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')
    message_body = re.sub(r"([_*\[\]()~`>\#\+\-=|\.!{}])", r"\\\1", message_body)