2013-05-01 60 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,其中回調將轉義兩個代碼標籤之間的代碼。但是請注意,現在無法表示包含代碼標籤的代碼片段!所以這是所有的權衡。

相關問題