2013-03-29 93 views
0

我有一個由Php處理的html表單。當我提交表單時,如果我編寫例如:5 rue de l'ourq。如果再次提交表單是因爲我錯誤地輸入了表單的任何其他字段,那麼它會顯示5 rue de l'ourq並再次5 rue de l \\'ourq。這發生在地址提交。Php反斜槓問題

PHP變量:

$address = $_POST['address']; 
$title = inputvalid($_POST['title']); 
$f_name = inputvalid($_POST['f_name']); 

的問題是$地址變量。我不是爲什麼它顯示反斜槓。這就是爲什麼我沒有把輸入無效功能,但不能解決這個問題。任何想法 ?

+4

檢查php.ini文件中的'magic_quotes_gpc'選項並將其設置爲'Off'。我的答案如下。 – TheJSB

+0

也許[addslashes()](http://php.net/manual/en/function.addslashes.php)函數,所以你需要[stripslashes()](http://www.php.net/manual/ en/function.stripslashes.php) –

+0

數據庫插入之前,您的角色轉義可能存在問題。使用準備好的語句可以解決問題。 – Sebas

回答

0

把這個在您的配置文件:

ini_set('magic_quotes_gpc', 'off'); 

,或者,如果這是不允許的服務器上,把這個配置:

##/ Special Code to stop get_magic_quotes_gpc 
function stop_magic_quotes($in) 
{ 
    $out = $in; 

    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) 
    { 
     if(is_array($out)) 
     { 
      foreach($out as $k=>$v) 
      { 
       $v = stop_magic_quotes($v); 
       $out[$k] = $v; 
      } 
     } 
     else 
     { 
      $out = stripslashes($out); 
     } 
    } 

    return $out; 
}//end func................ 

if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) 
{ 
    $_GET = array_map('stop_magic_quotes', $_GET); 
    $_POST = array_map('stop_magic_quotes', $_POST); 
}//end if.... 
+0

好吧,我正在嘗試它 –

+0

我把這段代碼放到了我的表單頁面中,但是在提交之後它再次顯示」5 rue de l \'ourq「 –

+0

ok我編輯過 –

6

聽起來像你有magic_quotes打開。你需要在你的php設置中關閉它們。

如果你不能關閉magic_quotes,我會讓你的inputvalid()函數所做的第一件事是檢查magic_quotes是否被啓用,如果它們的值是stripslashes()

http://php.net/manual/en/security.magicquotes.disabling.php

根據上面的鏈接,你可以在運行時通過添加以下代碼可模擬禁用,但它真的只是在做同樣的事情,正如我上面所說,檢查是否magic_quotes的是在隨後stripslashes()輸入數組:

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); 
} 
+0

是否有可能在該文件(form.php)中的magic_quotes? –

+0

通常不會,但你可以在.htaccess中正常使用它。 – Pitchinnate

+0

http://stackoverflow.com/questions/517008/how-to-turn-off-magic-quotes-on-shared-hosting – Pitchinnate

0

PHP添加反斜槓以逃避',因爲它實際上意味着打開一個字符串。使用stripslashes()刪除它們。

0

您的inputvalid函數阻止SQL注入,它用於加載和修改數據庫中的信息。該功能轉義'"以防止注射。從數據庫加載信息後,您的代碼應該能夠將這些轉義字符翻譯回人類可讀的表單。

0

從我對這個問題的評論:

檢查您的php.ini文件中的magic_quotes_gpc選項,並將其設置爲Off。不要忘記重新啓動php進程。如果您沒有直接訪問php.ini文件,請嘗試以下操作:

<?php ini_set('magic_quotes_gpc', 'Off'); ?>