2009-10-12 64 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>