2010-01-25 30 views
7

Như bạn đã biết khi Magic Quotes đang ON, dấu nháy đơn được thoát trong giá trị và cũng có trong khóa. Hầu hết các giải pháp để loại bỏ Magic Quotes chỉ chạy các giá trị unescape, chứ không phải các khóa. Tôi đang tìm kiếm một giải pháp mà sẽ không dò khóa và giá trị ...PHP: cách (chính xác) xóa dấu ngoặc kép thoát trong mảng khi Magic Quotes đang ON

tôi phát hiện ra trên PHP.net đoạn mã này:

$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); 

Nhưng tôi không thích "&" tài liệu tham khảo và mảng vì tôi có các lỗi như this one trong quá khứ ...

Có cách nào "tốt hơn" để báo giá kỳ diệu (khóa và giá trị) không thực hiện trong thời gian chạy hơn so với ở trên không?

+0

Hãy xem các câu hỏi liên quan về phía bên phải. – Gumbo

+0

Vâng tôi đã làm (và thậm chí đã thực hiện tìm kiếm trên web + SO trước khi đặt câu hỏi) nhưng tôi chưa tìm thấy giải pháp nào hoạt động 100% và không sử dụng tham chiếu "&". – AlexV

Trả lời

7

Tôi nghĩ rằng đây là một chút bụi và tránh lỗi tham khảo:

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'); 

Làm tương tự cho GET và COOKIE.

+0

Cho rằng chức năng được cung cấp cũng không bị trượt trên các phím, điều này có thể không loại bỏ hoàn toàn các dấu gạch chéo không? –

+0

Thao tác này sẽ không xóa các dấu gạch chéo khỏi các phím. –

Các vấn đề liên quan