2024-05-15 09:20:47 发布
网友
我终于升级了(重写;)我的第一个Django应用程序,但我正在迁移所有的内容。在
我愚蠢地给了用户一个完整的WYSIWYG编辑器来完成某些任务,生成的HTML代码当然非常难看,除了内容之外还有更多的标记。在
有人知道我可以用来清理代码的库或外部shell应用程序吗?
我有时会用tidy,但据我所知,这不能满足我的要求。我想简化所有额外的span和其他垃圾标签。我用一些正则表达式清除了最具攻击性的样式,但是如果只使用regex,我需要很长时间才能做更多的事情。在
有什么想法吗?在
Beautiful Soup可能会为您提供一个更完整的解决方案,但您可能可以使用html5lib更简单地完成一些清理工作(如果您对html5规则没意见):
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语法分析器来清理html:
标准答案是Beautiful Soup。在
Beautiful Soup
“Extra span”和“garbage tags”是您需要非常非常仔细地定义的内容,这样您就可以在不删除内容的情况下删除这些标记。在
我建议你做两件事。在
修复你的应用,这样用户在任何情况下都不会提供HTML。Django可以使用RST标记,它更加用户友好。http://docs.djangoproject.com/en/1.3/ref/templates/builtins/#django-contrib-markup
编写一个漂亮的Soup解析器并将用户的内容转换为RST标记。保留结构元素(标题、列表等)并尽可能丢失格式。
您还可以看看Bleach一个基于白名单的HTML消毒剂。它使用html5lib来完成Kyle发布的内容,但是您将获得更多的控制权,可以在最终输出中允许哪些元素和属性。在
Beautiful Soup可能会为您提供一个更完整的解决方案,但您可能可以使用html5lib更简单地完成一些清理工作(如果您对html5规则没意见):
您还可以通过如下方式初始化html语法分析器来清理html:
^{pr2}$标准答案是
Beautiful Soup
。在“Extra span”和“garbage tags”是您需要非常非常仔细地定义的内容,这样您就可以在不删除内容的情况下删除这些标记。在
我建议你做两件事。在
修复你的应用,这样用户在任何情况下都不会提供HTML。Django可以使用RST标记,它更加用户友好。http://docs.djangoproject.com/en/1.3/ref/templates/builtins/#django-contrib-markup
编写一个漂亮的Soup解析器并将用户的内容转换为RST标记。保留结构元素(标题、列表等)并尽可能丢失格式。
您还可以看看Bleach一个基于白名单的HTML消毒剂。它使用html5lib来完成Kyle发布的内容,但是您将获得更多的控制权,可以在最终输出中允许哪些元素和属性。在
相关问题 更多 >
编程相关推荐