هل يمكن للمرء أن يمنع جينشي من تحليل كيانات HTML؟

StackOverflow https://stackoverflow.com/questions/1555644

  •  20-09-2019
  •  | 
  •  

سؤال

لدي رمز 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>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top