2016-02-11 21 views
0

我的PHP代碼,應該刪除<和>,因爲它顯示在網站上從數據庫中,並防止欺騙活動PHP代碼不刪除< and >標籤

<?php 
$acc_music = mysql_real_escape_string($_POST['acc_music']); 

function strip_tags_content($text, $tags = '', $invert = FALSE) { 

    preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags); 
    $tags = array_unique($tags[1]); 

    if(is_array($tags) AND count($tags) > 0) { 
    if($invert == FALSE) { 
     return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text); 
    } 
    else { 
     return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text); 
    } 
    } 
    elseif($invert == FALSE) { 
    return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text); 
    } 
    return $text; 
} 

mysql_query("UPDATE users SET youtube_embed = '".strip_tags_content($acc_music)."' WHERE id = '" . $_SESSION['user']['id'] . "'")or die(mysql_error()); 
?> 

的acc_music輸出被放在數據庫但不刪除<和>標記。

+0

@rjdown似乎並沒有對我說此行爲作爲htmlspecialchars – fusion3k

+0

@rjdown htmlspecialchars:'<'到'<',而不是'<'到'' – fusion3k

+1

請發表一個原始文本/想要的轉換的例子嗎?您的代碼顯示爲'strip_tags'功能,但您的問題顯示爲''=>'a' – fusion3k

回答

1

您的strip_tags_content()未設置爲刪除實際的大於/小於符號。它似乎只能設置爲剝離實際標籤本身內的文本,而將其自身留下。

要麼改變你的正則表達式,或者return $text之前剛剛拋出此:

$text = str_replace(array('<', '>'), '', $text); 

或者更好的是,更換

return $text; 

隨着

return str_replace(array('<', '>'), '', $text);