2011-09-26 65 views
1

出於某種原因,我的所有引號都被轉義並顯示爲「。以前,它沒問題。然後我看着phpinfo()並看到我的magic_quotes_gpc已打開。但是,我找不到目錄/ usr/local/lib/php.ini文件所在的位置,我無法編輯我的.htaccess文件(獲得500內部服務器錯誤)。如果php.ini/.htaccess不可編輯,如何刪除魔術引號?

我試着把它放在我的腳本文件的頂部(它包含在所有頁面中):

if (get_magic_quotes_gpc()) { 
    $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); 
} 

但是,我的網頁上的「和」仍然有反斜槓。

我在做什麼錯?

+2

聯繫或更換您的虛擬主機。 – SLaks

+0

你使用變量引用/別名的方式實際上並沒有做你可能會想到的。我建議根據'$ GLOBALS'數組構建一些東西(根本不需要被引用)。但實際上,根本原因是您配置錯誤的虛擬主機。魔術引號啓用GPC表明您的虛擬主機沒有安全感。 – hakre

+1

你把什麼放在你的.htaccess文件中?此外,你有沒有嘗試'ini_set('magic_quotes_runtime',0);' – jprofitt

回答

2

試一試這段代碼,它在過去對我很有用。

<?php 
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) { 
     $quotes_sybase = strtolower(ini_get('magic_quotes_sybase')); 
     $unescape_function = (empty($quotes_sybase) || $quotes_sybase === 'off') ? 'stripslashes($value)' : 'str_replace("\'\'","\'",$value)'; 
    $stripslashes_deep = create_function('&$value, $fn', ' 
     if (is_string($value)) { 
      $value = ' . $unescape_function . '; 
     } else if (is_array($value)) { 
      foreach ($value as &$v) $fn($v, $fn); 
     } 
    '); 

    // Unescape data 
    $stripslashes_deep($_POST, $stripslashes_deep); 
    $stripslashes_deep($_GET, $stripslashes_deep); 
    $stripslashes_deep($_COOKIE, $stripslashes_deep); 
    $stripslashes_deep($_REQUEST, $stripslashes_deep); 
} 
2

您使用哪個PHP版本?

如果您使用的版本大於5.2,則可以使用filter_input()filter_input_array()。它似乎忽略了magic_quotes_gpc -directive的設置,並使用原始數據(默認過濾器爲FILTER_UNSAFE_RAW