我正在使用wysiwyg编辑器(ckeditor),我需要允许用户使用这些标签:
a (with only `rel=nofollow`), ul, ol, li, p, strong, br
我还需要避免插入可能危及网站的css或js或其他内容。
strip_tags
无法正常工作,因为它允许使用css - 例如,这不能起作用:
<p style="margin:1000px;"> hello </p>
答案 0 :(得分:1)
HTML Purifier是一个用PHP编写的符合标准的HTML过滤器库。 HTML Purifier不仅会删除所有恶意代码(更好地称为XSS),并且具有经过全面审核,安全且允许的白名单,还可以确保您的文档符合标准,只有通过全面了解W3C的规范才能实现。
答案 1 :(得分:-1)
您可以使用strip_tags()
仅允许特定标记。
<?php
$text = '<p>Test <span>paragraph</span>.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";
// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>
以上将输出:
Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>
CSS的解决方法
//strip out inline css and simplify style tags
$search = array('#<(strong|b)[^>]*>(.*?)</(strong|b)>#isu', '#<(em|i)[^>]*>(.*?)</(em|i)>#isu', '#<u[^>]*>(.*?)</u>#isu');
strip_tags
无法识别样式标记中的css不是文档文本。要解决此问题,请执行以下操作:
$htmlstring = preg_replace("'<style[^>]*>.*</style>'siU",'',$htmlstring);