我正在使用所见即所得的编辑器(ckeditor),我需要允许用户使用这些标签:
a (with only `rel=nofollow`), ul, ol, li, p, strong, br
我还需要避免插入 css 或 js 或其他可能危及网站的东西。
strip_tags
不起作用,因为它允许 css - 例如这不能工作:
<p style="margin:1000px;"> hello </p>
我正在使用所见即所得的编辑器(ckeditor),我需要允许用户使用这些标签:
a (with only `rel=nofollow`), ul, ol, li, p, strong, br
我还需要避免插入 css 或 js 或其他可能危及网站的东西。
strip_tags
不起作用,因为它允许 css - 例如这不能工作:
<p style="margin:1000px;"> hello </p>
HTML Purifier是一个用 PHP 编写的符合标准的 HTML 过滤器库。HTML Purifier 不仅会使用经过全面审核、安全且允许的白名单删除所有恶意代码(更广为人知的 XSS),它还将确保您的文档符合标准,这只有通过全面了解 W3C 规范才能实现。
您可以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
has 无法识别样式标签中的 CSS 不是文档文本。要解决此问题,请执行以下类似操作:
$htmlstring = preg_replace("'<style[^>]*>.*</style>'siU",'',$htmlstring);