2011-05-17 6 views
7

मैं अंत में उन्नयन कर रहा हूं (रीराइटिंग;)) मेरा पहला Django ऐप, लेकिन मैं सभी सामग्री माइग्रेट कर रहा हूं।बदसूरत WYSIWYG HTML कोड साफ़ करें? पायथन या * निक्स उपयोगिता

मैं मूर्खता से उन कुछ कार्यों के लिए एक पूर्ण WYSIWYG संपादक दिया था, का उत्पादन किया एचटीएमएल कोड पाठ्यक्रम सामग्री की तुलना में अधिक अतिरिक्त टैग के साथ बहुत बदसूरत की है।

क्या किसी को पुस्तकालय या बाहरी खोल ऐप के बारे में पता है जिसे मैं कोड साफ़ करने के लिए उपयोग कर सकता हूं?

मैं कभी-कभी साफ-सफाई का उपयोग करता हूं, लेकिन जहां तक ​​मुझे पता है कि मैं जो भी पूछ रहा हूं वह नहीं करता है। मैं सभी अतिरिक्त अवधि और अन्य कचरा टैग को सरल बनाना चाहता हूं। मैंने कुछ रेगेक्स के साथ सबसे आक्रामक अपमानजनक शैलियों को साफ किया, लेकिन मुझे केवल रेगेक्स का उपयोग करके कुछ भी करने में काफी समय लगेगा।

कोई विचार?

+1

मानक उत्तर 'सुंदर सूप' है। "अतिरिक्त अवधि" और "कचरा टैग" ऐसा कुछ है जिसे आपको बहुत सावधानी से परिभाषित करने की आवश्यकता होगी ताकि आप सामग्री को हटाए बिना टैग हटा सकें। –

+0

यह * आपके पास मौजूद एक को स्वच्छ करने के बजाय HTML को फिर से शुरू करने का बेहतर विचार हो सकता है। –

उत्तर

0

मानक उत्तर Beautiful Soup है।

"अतिरिक्त अवधि" और "कचरा टैग" ऐसा कुछ है जिसे आपको बहुत सावधानी से परिभाषित करने की आवश्यकता होगी ताकि आप सामग्री को हटाए बिना टैग हटा सकें।

मैं सुझाव दूंगा कि आप दो चीजें करें।

  1. अपने ऐप को ठीक करें ताकि उपयोगकर्ता किसी भी परिस्थिति में HTML प्रदान न करें। Django आरएसटी मार्कअप का उपयोग कर सकते हैं जो अधिक उपयोगकर्ता के अनुकूल है। http://docs.djangoproject.com/en/1.3/ref/templates/builtins/#django-contrib-markup

  2. एक सुंदर सूप पार्सर लिखें और उपयोगकर्ता के सामग्री को आरएसटी मार्कअप में बदलें। संरचनात्मक तत्वों (शीर्षलेख, सूचियां, आदि) रखें और यथासंभव स्वरूपण को खो दें।

2

ब्यूटीफुल सूप होगा शायद आप एक अधिक पूर्ण समाधान मिलता है, लेकिन आप कुछ सफाई html5lib के साथ और अधिक बस किया जाना सक्षम हो सकता है (यदि आप एचटीएमएल 5 के नियमों के साथ ठीक कर रहे हैं):

import html5lib 
from html5lib import sanitizer, treebuilders, treewalkers, serializer 

my_html = "<i>Some html fragment</I>" #intentional 'I' 

html_parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("dom")) 
dom_tree = html_parser.parseFragment(my_html) 
walker = treewalkers.getTreeWalker("dom") 
stream = walker(dom_tree) 
s = serializer.htmlserializer.HTMLSerializer(omit_optional_tags=False, quote_attr_values=True) 
cleaned_html = s.render(stream) 
cleaned_html == '<i>Some html fragment</i>" 

आप भी इस तरह अपने html_parser आरंभ द्वारा एचटीएमएल स्वच्छ कर सकते हैं:

html_parser = html5lib.HTMLParser(tree=treebuilders.getTreeBuilder("dom"), tokenizer=sanitizer.HTMLSanitizer) 
3

तुम भी एक सफेद सूची आधारित HTML प्रक्षालक Bleach पर एक नज़र ले सकता है। यह काइल पोस्ट करने के लिए html5lib का उपयोग करता है, लेकिन आपको अंतिम आउटपुट में कौन से तत्वों और विशेषताओं की अनुमति है, इस पर आपको बहुत अधिक नियंत्रण मिलेगा।

संबंधित मुद्दे