2016-02-11 52 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);