正如标题所说,我想知道这两个相似的功能是否可以合并为一个:
这个消除了一般性的输入:
function sanitize($input)
{
if(get_magic_quotes_gpc() == true)
{
$input = stripslashes($input);
}
return htmlspecialchars($input);
}
并且这个清理更新数据库的输入:
function sanitizeSQL($input)
{
if(get_magic_quotes_gpc() == true)
{
$input = stripslashes($input);
}
return mysql_real_escape_string(htmlspecialchars($input));
}
可能使用另一个if语句或者添加或删除* mysql_real_escape_string()*的东西?只是不确定如何去做...
像往常一样,所有的帮助都会受到赞赏并提前感谢。
答案 0 :(得分:2)
合并它们非常简单。
function sanitize($input, $sql = false) { // $sql will default to false
if (get_magic_quotes_gpc() === true) $input = stripslashes($input);
$input = htmlspecialchars($input);
return ($sql === true ? mysql_real_escape_string($input) : $input);
}
我们只需添加一个$sql
变量来说明是否需要对SQL进行清理。
答案 1 :(得分:1)
function sanitizeBoth($input, $mysqlEscape)
{
if(get_magic_quotes_gpc() == true)
{
$input = stripslashes($input);
}
$return = htmlspecialchars($input);
if ($mysqlEscape){
$return = mysql_real_escape_string($return);
}
return $return;
}
$ mysqlEscape是开关:如果是,它就像'sanitizeSQL'一样,如果为'sanitize'则为false。
答案 2 :(得分:1)
我会使用sanitizeSQL调用sanitize。没有重复的代码,但功能名称不同。
function sanitizeSQL($input)
{
return mysql_real_esape_string(sanitize($input));
}
如果你确实只想要一个方法来调用,我会传递第二个参数:
function sanitize($input, $forSql)
{
if(get_magic_quotes_gpc() == true)
{
$input = stripslashes($input);
}
$input = htmlspecialchars($input);
if($forSql == true)
{
$input = mysql_real_escape_string($input);
}
return $input.
}
答案 3 :(得分:0)
让我提出一个不同的方法。您应该禁用magic_quotes,或者在example #2 here之后尽快删除所有get / post / cookie数据的斜杠。
不要将这部分代码用于准备HTML或SQL。当您实际构建HTML文档或SQL语句时,应该单独完成。此时,您只需要htmlspecialchars
表示HTML,或mysql_real_escape_string
表示SQL。
不要错误地认为有一个适用于所有输入的“一般”消毒功能。事实上,最好不要将其视为消毒。纯文本已经充足了卫生。您正在做的只是转义特定输出格式(HTML,SQL,CSV,PDF等)的文本。每种输出格式都有一个不同的转义方法,因此没有一种方法适用于所有这些方法。这就是为什么magic_quotes是一个糟糕的主意,以及为什么它需要尽快撤消。