2013-05-01 62 views
0

我正在创建一个评论框,人们可以提问他们的问题。如何在htmlpurifier中允许代码

我得到了很多人的询问,他们如何做一些涉及在表单中输入代码的内容。

表单经过htmlpurifier以确保其安全使用。

但是,当有人输入回声代码等它不允许它。 或者如果有人输入一个div,那么即使包装在<的代码中也不允许。

比如这个:

<code><div class="classname"></div></code> 

将只需添加一个div。

<code><?php echo $word; ?></code> 

不会显示的代码在所有。

我已经设置了htmlpurifier的方式是:

$content = $_POST['comment']; 

$rawf = str_replace('<code>', '<pre><code>', $content); 
$rawfp = str_replace('</code>', '</code></pre>', $rawf); 

require_once '../Libs/htmlPurifier/library/HTMLPurifier.auto.php'; 

$purifierconfig = HTMLPurifier_Config::createDefault(); 

$purifierconfig->set('HTML.Allowed', 'b,a[href],i,em,br,code,pre'); 

$purifier = new HTMLPurifier($purifierconfig); 
$clean_html = $purifier->purify($rawfp); 
$ticketpost = str_replace('<a ', '<a rel="nofollow" ', $clean_html); 

然后$ ticketpost插入使用PDO数据库预处理语句。

有没有我没有做的事,或做错了?

如果是这样,请你帮忙。

感谢

回答

1

您的问题是,如果输入的是真正的HTML,那么任何代码片段需要为了在结果中显示转义。我们有特殊的<![CDATA[ put code here ]]>语法,但有时候,您不想用这样的额外语法来打扰用户。在这种情况下,您可以在代码标签上执行preg_replace_callback,其中回调将转义两个代码标签之间的代码。但是请注意,现在无法表示包含代码标签的代码片段!所以这是所有的权衡。

相关问题