消毒HTMLinput

我正在考虑添加一个富文本编辑器,以允许非程序员改变文本的方面。 然而,一个问题是,如果标记不正确,可能会扭曲呈现的页面的布局。 什么是一个很好的轻量级的方式来净化HTML?

你将不得不决定好和轻量级之间。 推荐的select是'HTMLPurifier',因为它提供了没有大惊小怪的安全默认值。 作为更快的select,通常build议使用“ htmLawed ”。

另请参阅HTMLPurifier作者: http ://htmlpurifier.org/comparison这个相当客观的概述

我非常喜欢HTML Purifier ,它允许您指定HTML代码中允许使用哪些标签和属性 – 并生成有效的HTML。

使用BB代码(或者像SO一样),否则机会非常渺茫。 示例函数…

function parse($string){ $pattern = array( "/\[url\](.*?)\[\/url\]/", "/\[img\](.*?)\[\/img\]/", "/\[img\=(.*?)\](.*?)\[\/img\]/", "/\[url\=(.*?)\](.*?)\[\/url\]/", "/\[red\](.*?)\[\/red\]/", "/\[b\](.*?)\[\/b\]/", "/\[h(.*?)\](.*?)\[\/h(.*?)\]/", "/\[p\](.*?)\[\/p\]/", "/\[php\](.*?)\[\/php\]/is" ); $replacement = array( '<a href="\\1">\\1</a>', '<img alt="" src="\\1"/>', '<img alt="" class="\\1" src="\\2"/>', '<a rel="nofollow" target="_blank" href="\\1">\\2</a>', '<span style="color:#ff0000;">\\1</span>', '<span style="font-weight:bold;">\\1</span>', '<h\\1>\\2</h\\3>', '<p>\\1</p>', '<pre><code class="php">\\1</code></pre>' ); $string = preg_replace($pattern, $replacement, $string); $string = nl2br($string); return $string; } 

 echo parse("[h2]Lorem Ipsum[/h2][p]Dolor sit amet[/p]"); 

结果…

 <h2>Lorem Ipsum</h2><p>Dolor sit amet</p> 

在这里输入图像描述

或者只是使用HTML净化器:)

HTML净化器和htmLawed都很好。 htmLawed具有更小的占地面积和高可configuration性的优点。 除了进行平衡标签,过滤特定HTML标签或其属性或属性内容(通过白名单或黑名单)等标准工作外,还允许使用自定义function。