可以阻止Genshi解析HTML实体吗?

2024-09-30 08:15:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下使用Genshi(简化)的Python代码:

with open(pathToHTMLFile, 'r') as f:
    template = MarkupTemplate(f.read())
finalPage = template.generate().render('html', doctype = 'html')

源HTML文件包含©™和{}等实体。Genshi将其替换为UTF-8字符,这会导致查看器出现问题(输出作为独立文件使用,而不是对web请求的响应),最终查看结果HTML。有没有办法阻止Genshi解析这些实体?像&这样的更常见的方法可以很好地通过。在


Tags: 文件代码实体readhtmlaswithtemplate
3条回答

实际上,&并没有被传递,而是被解析为一个与号字符,然后在退出时序列化回&,因为这是在HTML中表示文本与号所必需的。^另一方面,{}不是必需的转义符,因此可以将其保留为其字面字符。在

所以不,没有办法停止正在解析的实体引用。但您可以通过序列化为纯ASCII来确保在返回时重新转义非ASCII字符:

template.generate().render('html', doctype= 'html', encoding= 'us-ascii')

您仍然无法在输出中获得实体引用©,但是您将得到字符引用©,这是等价的,希望显示最终文件的任何内容都能理解它。在

粘着

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

在HTML的<head>中,应该会导致浏览器正确呈现UTF-8。在

为了澄清,根本问题是相应的©UTF-8字符不能在静态HTML中正确呈现。将meta标记放在HTML中告诉浏览器如何正确地解释字符集,从而正确地呈现UTF-8字符。在

要防止Genshi中的(x)html标记字符转义,请执行以下操作:

from genshi.core import Markup
...
newstring = Markup(oldstring)
...
<now apply templates as before, but substituting newstring for oldstring>

相关问题 更多 >

    热门问题