代码之家  ›  专栏  ›  技术社区  ›  AlexV

php:当magic quotes打开时,如何(正确)删除数组中的转义引号

  •  7
  • AlexV  · 技术社区  · 15 年前

    正如您所知道的,当magic引号打开时,单引号在值和键中进行转义。大多数解决方案在运行时只删除unescape值,而不是键。我正在寻找一个解决方案,它将消除关键点和价值观…

    我在php.net上发现了这段代码:

    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process))
    {
        foreach ($val as $k => $v)
        {
            unset($process[$key][$k]);
            if (is_array($v))
            {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            }
            else
            {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
    

    但我不喜欢“引用和数组”,因为我有这样的错误 this one 在过去…

    在运行时,是否有一种“更好”的方法来取消对魔法引号(键和值)的搜索?

    2 回复  |  直到 15 年前
        1
  •  7
  •   Lucas Oman    15 年前

    我认为这有点干净,可以避免引用错误:

    function unMagicQuotify($ar) {
      $fixed = array();
      foreach ($ar as $key=>$val) {
        if (is_array($val)) {
          $fixed[stripslashes($key)] = unMagicQuotify($val);
        } else {
          $fixed[stripslashes($key)] = stripslashes($val);
        }
      }
      return $fixed;
    }
    
    $process = array($_GET,$_POST,$_COOKIE,$_REQUEST);
    $fixed = array();
    foreach ($process as $index=>$glob) {
      $fixed[$index] = unMagicQuotify($glob);
    }
    list($_GET,$_POST,$_COOKIE,$_REQUEST) = $fixed;
    
        2
  •  -1
  •   Crozin    15 年前
    array_walk_recursive($_POST, 'stripslashes');
    

    对get和cookie执行相同的操作。

    推荐文章