合并这两个类似的php函数


Merge these 2 similar php functions

正如标题所说,我想知道这两个类似的函数是否可以合并为一个:

这一个净化了一般输入:

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_eescape_string((*?只是不知道该怎么做…

像往常一样,我们会提前感谢所有的帮助。

合并它们非常简单。

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清理。

我会使用消毒SQL调用消毒。没有重复的代码,但函数名称不同。

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.
}
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是一个开关:如果它为true,它将作为"消毒SQL"工作,如果它为false,则作为"消毒"工作。

让我提出一种不同的方法。您应该禁用magic_quotes,或者尽早删除所有get/post/cookie数据上的斜杠,如下例2所示。

不要将这部分代码用于准备HTML或SQL。当您实际构建HTML文档或SQL语句时,这应该单独完成。在这一点上,您所需要的只是HTML的htmlspecialchars,或SQL的mysql_real_escape_string

不要错误地认为有一个"通用"的净化功能可以用于所有输入。事实上,最好不要把它看作是消毒。纯文本已经足够卫生了。您所做的只是对特定输出格式(HTML、SQL、CSV、PDF等(的文本进行转义。每种输出格式都有不同的转义方法,因此没有适用于所有格式的方法。这就是为什么magic_quotes是一个糟糕的主意,也是为什么它需要尽快撤销的原因。