2010-01-23 89 views
0

當我寫PHP 5.3.1在默認情況下是否添加一個斜槓(「」)?

輸入數據hel'l"lo

print_r($_POST)顯示hel\'\"lo

和當我使用

if(get_magic_quotes_gpc()){ 
    mysql_real_escape_string($_POST); 

顯示

hel\\\'\\\"lo 

由於PHP自動添加斜槓,是否需要使用mysql_real_escape_string

+0

親愛的主席先生,當我沒有得到真正有價值的答案時,我該如何接受? – diEcho 2010-01-23 12:11:41

回答

3

沒有過時的選擇,從5.3版本開始,就沒有默認添加斜線。還請注意,addslashes不是替換爲mysql_real_escape_string;你可以閱讀更多關於here

+0

所以我必須使用'mysql_real_escape_string($ _ POST);' – diEcho 2010-01-23 12:12:29

+0

是的,你可以使用它:) – Sarfraz 2010-01-23 12:38:27

+0

你應該也使用MySQLi擴展而不是MySQL,因爲它從PHP v5開始已被棄用。五 – ub3rst4r 2014-08-10 01:23:38

2

magic_quotes_gpc的是在PHP 5.3

+0

那我該怎麼辦? 應該使用'mysql_real_escape_string($ _ POST);' 或不? – diEcho 2010-01-23 12:09:03

+0

是的,你必須使用它 – nex2hex 2010-01-23 12:36:57

0

是否需要使用mysql_real_escape_string?

是的。但是不是作爲覆蓋編碼$_POST$_GET。這是在輸入階段應用輸出階段轉義機制,這是錯誤的,會以意想不到的方式破壞您的字符串。

您應該保持原始形式的字符串,直到將字符串插入到另一個上下文中。 只有點,您使用適當的轉義函數。與MySQL:

或HTML:

<p>Title: <?php echo(htmlspecialchars($_POST['title'])) ?></p> 
0

我最近使用PHP 5.3.6啓用選項 「magic_quotes_gpc的」 一個託管。 不幸的是,它是一個共享主機,所以我無法更改配置(另外「php_flag magic_quotes_gpc關」到.htaccess失敗)。

這對我來說是一開始把這個工作守則級解決方案

if (get_magic_quotes_gpc() === 1) 
{ 
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true); 
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true); 
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true); 
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true); 
} 

看到這裏太

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

0

神奇的解決方案在互聯網上找到誠實

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