0

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

\每次我编辑我的条目时,它都会增加一个额外的内容。

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

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_quote因为ON

4

3 回答 3

2

你的功能没有什么意义。如果魔术引号打开(例如,输入被转义),您将取消它。如果它没有打开,你就逃脱它。所以你会得到不同的结果,这取决于你是否有魔术报价。

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

  1. 全局禁用魔术引号或反转其效果
  2. 在构造 SQL 查询时转义字符串(更好地)使用准备好的语句
  3. 当你从数据库中取回它时,不会unescape/strip/whatever 任何东西。
于 2009-11-12T15:47:30.490 回答
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函数页面,页面上有几个用户评论,其中包含相当优雅的解决方案,可确保去除斜线。

于 2009-11-12T15:24:25.980 回答
0

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

于 2009-11-12T18:16:12.437 回答