هل يمكن للمرء أن يمنع جينشي من تحليل كيانات HTML؟
سؤال
لدي رمز Python التالي باستخدام Genshi (مبسط):
with open(pathToHTMLFile, 'r') as f:
template = MarkupTemplate(f.read())
finalPage = template.generate().render('html', doctype = 'html')
يحتوي ملف HTML المصدر على كيانات مثل ©
, ™
و ®
. يحل Genshi محلها بحرف UTF-8 ، والذي يسبب مشاكل مع المشاهد (يتم استخدام الإخراج كملف مستقل ، وليس استجابة لطلب الويب) الذي يرى في النهاية HTML الناتج. هل هناك أي طريقة لمنع جينشي من تحليل هذه الكيانات؟ الأكثر شيوعا مثل &
يتم تمريرها من خلال على ما يرام.
المحلول
في الحقيقة &
لم يتم تمريرها ، يتم تحليلها في شخصية ampersand ، ثم تسلسلها مرة أخرى &
في الطريق لأن هذا ضروري لتمثيل ampersand الحرفي في HTML. ©
, من ناحية أخرى ، ليس هروبًا ضروريًا ، لذلك يمكن تركه كحرف حرفي.
لذلك لا ، لا توجد طريقة قف مرجع الكيان يجري تحليله. ولكن يمكنك التأكد من إعادة تشكيل الأحرف غير ASCII في طريق العودة إلى الخلف عن طريق التسلسل إلى ASCII العادي:
template.generate().render('html', doctype= 'html', encoding= 'us-ascii')
ما زلت لن تحصل على مرجع الكيان ©
في الإخراج الخاص بك ، لكنك ستحصل على مرجع الشخصية ©
وهو ما يعادل وينبغي أن نأمل أن يتم فهمه من قبل كل ما يعرض الملف النهائي.
نصائح أخرى
الالتصاق
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
في ال <head>
من HTML الخاص بك يجب أن يتسبب في أن المتصفحات تقدم بشكل صحيح UTF-8.
للتوضيح ، فإن مشكلة الجذر هي أن حرف © UTF-8 المقابل لا يتم عرضه بشكل صحيح في HTML ثابت. يخبر وضع علامة التعريف في HTML المتصفح كيفية تفسير مجموعة الأحرف بشكل صحيح وبالتالي يجعل أحرف UTF-8 بشكل صحيح.
لمنع الهروب من أحرف علامات HTML في Genshi:
from genshi.core import Markup
...
newstring = Markup(oldstring)
...
<now apply templates as before, but substituting newstring for oldstring>