2

我观察到,python-markdown 总是在反引号内转义 HTML 实体,即使使用 safe=False:

In [1]: import markdown

In [2]: markdown.markdown("&")
Out[2]: u'<p>&amp;</p>'

In [3]: markdown.markdown("*&amp;*")
Out[3]: u'<p><em>&amp;</em></p>'

In [4]: markdown.markdown("`&amp;`")
Out[4]: u'<p><code>&amp;amp;</code></p>'

是错误还是功能?有没有办法保持 HTML 实体不变?

4

1 回答 1

-1

反引号指定一个代码块,这意味着必须对 HTML 实体进行转义,以便代码正确显示,因此这不是错误。虽然我不知道您为什么要解决这个问题,并且可能有更好的方法来实现您的目标,但python-markdown忽略 HTML 标记内的文本,因此将您的 HTML 实体包含在无操作的 HTML 中可能适合您的目的。

>>> import markdown
>>> markdown.markdown("<div>`&amp;`</div>")
u'<div>`&amp;`</div>'

如果您发现这些<div>标签令人反感,您可以简单地使用div类和 HTML 解析工具(如BeautifulSoup )合理地对它们进行后处理。

>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup("<div class='nothing'>`&amp;`</div>")
>>> for div in soup.findAll('div', 'nothing'):
...     div.replaceWithChildren()
>>> print soup
`&amp;`

也许比你最初想要的要复杂一些,但我认为这可能是最简单的解决方案,没有从根本上修改python-markdown.

于 2014-03-09T17:20:59.087 回答