2014-10-16 86 views
-1

我試圖讓htmlpurifier我的代碼工作如下:HtmlPurifier disformats輸入

if(isset($_POST['selectors_data'])) { 
//$selectors_data = tep_db_prepare_input($_POST['selectors_data']); 
$selectors_data2 = $_POST['selectors_data']; 

$config = HTMLPurifier_Config::createDefault(); 
$purifier = new HTMLPurifier($config); 
$selectors_data = $purifier->purify($selectors_data2); 
} 

我嘗試插入(NEWVALUE):<i class="fa fa-angellist"></i>

在我的本地所有魔術引號和引用將魔術引號關閉

數據保存時(通過jQuery $ .post)

$.post('ajax_editor.php', { 
     action: 'update', 
     selectors_id: id, 
     selectors_field: field, 
     selectors_data: newvalue 
    }, function (data) { 

     $(' #container ').html(data); 

    }, "json"); 

通過以下查詢的數據被告知要插入:

tep_db_query("update " . TABLE_BTS_CSS_SELECTORS . " set selectors_name = '" . $selectors_data . "' where selectors_id = '" . (int)$selectors_id . "'"); 

,並通過以下數據庫函數的數據實際上是插入:

function tep_db_query($query, $link = 'db_link') { 
global $$link; 

$result = mysqli_query($$link, $query) or tep_db_error($query, mysqli_errno($$link), mysqli_error($$link)); 

return $result; 
} 

所以,沒有被替換/剝離/除了使用htmlpurifier 以外,整個過程都被刪除但數據存儲爲:

<i class=""fa"></i> 

我沒有選擇。

由於我的網站是UTF-8我也嘗試:

$purifier = new HTMLPurifier(); 
$selectors_data = $purifier->purify($selectors_data2); 

因此,沒有配置

當我在Htmlpurifier(click to see attempt)演示現場測試,一切似乎罰款。

UPDATE:我現在是100%肯定不是由HTMLpurifier.There產生的問題似乎隱藏着一些未知的代碼轉換$_POST語句(對不起)

解決發現「隱藏代碼:

// handle magic_quotes_gpc turned off. 
    if (!get_magic_quotes_gpc()) { 
    do_magic_quotes_gpc($HTTP_GET_VARS); 
    do_magic_quotes_gpc($HTTP_POST_VARS); 
    do_magic_quotes_gpc($HTTP_COOKIE_VARS); 
    } 

凡ofcourse每個$ _GPC或$ HTTP_GPC斜槓增加。 這麼簡單stripslashes($_POST['selectors_data'])之前HTMLPurifier讓它工作:)

對不起這個大帖子

+0

也許多個類不支持 – 2014-10-16 21:49:41

+0

只是添加鏈接到演示網站,在那裏可以看到它支持。 – HenryW 2014-10-16 21:50:42

+0

你確定''是傳遞給HTMLPurifier的整個字符串 – 2014-10-16 21:55:46

回答

0

腳本本身有代碼,它充當magic_quotes_gpc ON,所以當檢測到它在服務器環境中被關閉時,該函數被執行。

上述特定情況下的解決方案是在將數據插入到數據庫之前的簡單stripslashes()

所以HTMLPurifier的工作應該是這樣。