-1

我正在使用所见即所得的编辑器(ckeditor),我需要允许用户使用这些标签:

a (with only `rel=nofollow`), ul, ol, li, p, strong, br

我还需要避免插入 css 或 js 或其他可能危及网站的东西。

strip_tags不起作用,因为它允许 css - 例如这不能工作:

<p style="margin:1000px;"> hello </p>
4

2 回答 2

1

HTML Purifier是一个用 PHP 编写的符合标准的 HTML 过滤器库。HTML Purifier 不仅会使用经过全面审核、安全且允许的白名单删除所有恶意代码(更广为人知的 XSS),它还将确保您的文档符合标准,这只有通过全面了解 W3C 规范才能实现。

于 2013-06-19T16:18:27.340 回答
-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_tagshas 无法识别样式标签中的 CSS 不是文档文本。要解决此问题,请执行以下类似操作:

$htmlstring = preg_replace("'<style[^>]*>.*</style>'siU",'',$htmlstring);
于 2013-06-19T15:03:49.990 回答