2009-10-12 86 views
3

我有使用元史(简化的)以下Python代码:能阻止Genshi解析HTML实体吗?

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

源HTML文件中包含的实体,如©™®。 Genshi将它们替换为UTF-8字符,这会导致查看器出现问题(输出被用作独立文件,而不是Web请求的响应),最终看到生成的HTML。有没有办法阻止Genshi解析这些实体?像&这类较为常见的就可以通过了。

回答

9

其实&没有通过,它解析为一个符号字符,然后连载回&上,因为这是必要的,以表示HTML文字符号的方式。另一方面,它不是一个必要的转义,所以它可以作为它的文字特征留下。

所以不行,没有办法停止被解析的实体引用。但是你可以确保非ASCII字符的方式重新逃回了由连载于纯ASCII:

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

你仍然不会得到你的输出实体引用©,但你会得到的字符引用©,这是等同的,并且希望被显示最终文件的任何东西理解。

3

坚持

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

应导致浏览器正确渲染UTF-8。

为了说明问题,根源问题是相应的© UTF-8字符在静态HTML中无法正确显示。将元标记放在HTML中告诉浏览器如何正确解释字符集,从而正确呈现UTF-8字符。

0

为了防止元史的(X)HTML标记字符转义:

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