【问题标题】:Function escaping quote is not working correctly转义引号的函数无法正常工作
【发布时间】:2009-11-12 15:13:45
【问题描述】:

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

每次我编辑我的条目时,它都会添加一个额外的\

在线服务器有以下设置:

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

【问题讨论】:

  • 你的意思是你得到了额外的反斜杠,例如"你的函数的返回字符串是这样的"
  • 是的,每次保存都会添加一个\
  • @Dukeling 请停止。魔术引号是一个比魔术引号 gpc 更通用的术语。如果您想参与那么多,只需添加一个同义词即可。
  • @YourCommonSense 是的,我现在意识到magic-quotes 的大部分问题实际上都是关于 PHP 的。我不能建议一个同义词,因为我没有 5 个标签的声誉。 Related Meta discussion.

标签: php mysql escaping stripslashes magic-quotes


【解决方案1】:

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

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

  1. Disable magic quotes or reverse its effect globally
  2. 或者escape strings当你构造SQL查询时或者(更好)use prepared statements
  3. 不是当你从数据库中取回它时,unescape/strip/whatever任何东西。

【讨论】:

  • 即使magic_quotes_gpc 开启也可以使用转义字符串吗?
  • “使用转义字符串”是什么意思?
【解决方案2】:

即使打开了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 函数页面,页面上有几个用户 cmet,它们提供了相当优雅的解决方案来确保去除斜线。

【讨论】:

  • 我已经在没有 else 的情况下尝试了你的代码,但我仍然遇到同样的问题。
  • 问题是你得到了太多的斜线?您确定在将字符串发送到函数之前没有添加额外的斜杠吗? stripslashes 函数只会删除一组斜杠。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2017-12-15
    • 2013-03-27
    • 2012-08-15
    • 2013-11-05
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多