函数转义引用无法正常工作

时间:2009-11-12 15:13:46

标签: php mysql escaping stripslashes magic-quotes

我正在试图弄清楚为什么这个功能无法正常工作。

每次编辑条目时都会额外添加\

在线服务器具有以下设置:

magic_quotes_gpc On 
magic_quotes_runtime Off 
magic_quotes_sybase Off

以下是代码:

function esc($s)
{
  if (get_magic_quotes_gpc()) {
    if (ini_get('magic_quotes_sybase'))
      $s = str_replace("''", "'", $s);
    else
      $s = stripslashes($s);
  } //if 
  return mysql_real_escape_string($s);
}

修改记事

我已经尝试完全删除此功能以查看它的作用......并且它做了同样的事情,所以我意识到addslashes也在代码中用于同一事物。

额外\因为magic_quoteON

3 个答案:

答案 0 :(得分:2)

你的功能没什么意义。如果启用了魔法引号(例如,输入被转义),那么你可以忽视它。如果它没有打开,你逃脱它。所以你会得到不同的结果,这取决于你是否有魔术引用。

无论如何,依靠魔术引用是一种非常糟糕的做法。你应该:

  1. Disable magic quotes or reverse its effect globally
  2. 构建SQL查询(更好)escape strings时,
  3. use prepared statements
  4. unescape / strip /从数据库中取回时的任何内容。

答案 1 :(得分:1)

即使启用了magic_quotes_sybase,您可能也想要条带:

function esc($s)
{
    if (get_magic_quotes_gpc()) {
        if (ini_get('magic_quotes_sybase'))
            $s = str_replace("''", "'", $s);

        $s = stripslashes($s);
    } //if 
    return mysql_real_escape_string($s);
}

您可能还想查看PHP的get_magic_quotes_gpc功能页面,页面上有几个用户注释,其中包含相当优雅的解决方案,可确保删除斜杠。

答案 2 :(得分:0)

好的,我已经解决了这个问题。现在是一个快速解决方案,我删除了function esc($s) 我在php.ini中将Magic_Quote更改为OFF 我正在保持addlashes解决方案。