合并这两个类似的php函数

时间:2011-08-23 23:53:12

标签: php function merge

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

这个消除了一般性的输入:

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()*的东西?只是不确定如何去做...

像往常一样,所有的帮助都会受到赞赏并提前感谢。

4 个答案:

答案 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是一个糟糕的主意,以及为什么它需要尽快撤消。