function intfix($i)
{
$i = preg_replace('/[^\d]/', '', $i);
if (!strlen($i))
$i = 0;
return $i;
}
function textfix($text = ""){
if(!is_array($text)){ $text = htmlentities($text,ENT_QUOTES,"UTF-8");
}
return $text;
}
这两个函数会过滤所有用户提交的变量。你认为它足够安全吗?
我对字符编码有点困惑。我希望允许我的用户使用ACII艺术并使用他们想要的任何类型的符号,但目前似乎不可能。应该做什么?它可能与表的编码以及我的函数有关。
编辑:
这些数字实际上非常大。有时数以万亿计。
这是我如何过滤用户输入的示例:
if($_GET['number']){ $number = intfix($_GET['number']); }
if($_GET['text']){ $text = textfix($_GET['text']); }'
这是你在说的错误吗?
另外,这是我在插入db之前过滤它们的方法:
function filter($input,$s=1){
$input = strip_tags($input, "");
$input = str_replace("\n", "<br />", $input);
if($s == 1){$input = bbcode($input); } // smileys and bbcode
$input = textWrap($input); // wordwrap without breaking html
return $input;
}
function unfilter($input){ // to unfilter in case I need to show the text in a textbox
$input = html_entity_decode($input,ENT_QUOTES,"UTF-8");
$input = str_replace("<br />", "\n", $input);
return $input;
}
答案 0 :(得分:1)
用intval()
或floatval()
替换intfix - 除非你期望非常大的数字,否则你正在重新发明轮子。
我希望你没有在输入上使用textfix()
?那将是一个非常大的错误。您必须仅在输出上编码实体,而不是输入。
对于UTF-8,您可能需要:
ini_set('default_charset', 'UTF-8');
答案 1 :(得分:0)
intfix()
函数不是必需的,您可以通过执行$num = (int)$num;
对于字符串清理,如果您不能使用参数化查询,请将字符串传递给myqsl_real_escape_string()
。