2010-01-25 53 views
7

正如您知道Magic Quotes爲ON時,單引號會在值和鍵中轉義。大多數解決方案只能在運行時刪除Magic Quotes,而不是密鑰。我正在尋找一個解決方案,將取消轉義鍵和值...PHP:當Magic Quotes ON時,如何(正確)刪除數組中的轉義引號

我發現在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的錯誤...

在運行時是否有一種「更好」的方式來在運行時使用魔術引號(鍵和值)?

+0

看看右側的相關問題。 – Gumbo 2010-01-25 15:24:35

+0

是的,我做了(甚至在提出問題之前做了一次Web + SO搜索),但是我還沒有找到任何可以100%工作並且不使用「&」引用的解決方案。 – AlexV 2010-01-25 15:56:26

回答

7

我認爲這是一個少許清潔劑,避免了錯誤參考:

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; 
-1
array_walk_recursive($_POST, 'stripslashes'); 

對GET和COOKIE做同樣的事情。

+0

鑑於所提供的功能也會在鍵上剝去斜槓,可能這不會完全刪除斜槓嗎? – 2010-01-25 15:01:42

+0

這不會去除鍵上的斜槓。 – 2010-01-25 15:09:15