2012-02-10 81 views
1

我已經繼承了需要在我的PHP5服務器上運行的php4站點,我已經解決了大部分問題,但無法弄清楚作者在此嘗試做什麼。嗯,準確地說,他正在引用提交的文本,但我不確定這個函數應該如何工作,以及我應該如何在PHP5中執行它?轉義引號 - 從PHP4轉移到PHP5

# Function to safely add slashes when magic quotes is switched off 

function safe_slash($string) 
{ 
    if (!get_magic_quotes_gpc()) 
    { 
    $string = addslashes($string); 
    } 

    return $string; 
} 
+0

如果'get_magic_quotes_gpc'已關閉,則代碼將斜槓添加到'$ string'中....相同的代碼將以PHP5運行... [readSlashes()](http://www.php.net/ manual/en/function.addslashes.php) – ManseUK 2012-02-10 10:00:21

+0

表示您在使用此代碼時遇到問題。 **它是什麼**? – 2012-02-10 10:08:28

+0

對不起,問題是斜槓沒有被添加到字符串,所以如果我有一個像O'Leary這樣的名字,'不會被轉義並且查詢失敗。 – deep64blue 2012-02-10 10:22:17

回答

2

默認情況下PHP4在php.ini中的一個選項打開名爲magic_quotes_gpc,它將addslashes所有$_POST/$_GET變量。

如果值magic_quotes_gpc的是關閉的,如果是,將addslashes到$字符串通過該代碼簡單地檢查。

應該在PHP4和PHP5的工作(在PHP6 magic_quotes_gpc的將被刪除我相信)。不建議依賴,但它最初是爲了「保護」SQL注入,但它被發現是不夠的。

+0

謝謝 - 現在推薦的方法是什麼?mysqli_real_escape_string ? – deep64blue 2012-02-10 12:32:37

+0

有幾種推薦的方法,'mysqli_real_escape_string'確實比依賴魔術引號有所改進。更大的改進是使用預準備語句和參數化查詢(例如[PDO](http://www.php。 net/manual/en/class.pdo.php)),所以你不必擔心自己逃脫字符串。 – pjumble 2012-02-10 13:12:46

-1
$_POST = self::addSlashesRecursive($_POST); 
$_GET = self::addSlashesRecursive($_GET); 
$_COOKIE = self::addSlashesRecursive($_COOKIE); 

function addSlashesRecursive($s) 
{ 
    if (get_magic_quotes_gpc()) { 
     return $s; 
    } 
    if (is_string($s)) { 
     return addslashes($s); 
    } else if (is_array($s)) { 
     return array_map(array('addSlashesRecursive'), $s); 
    } 
    return $s; 
} 

但我的腦海裏會得到更好的改變你的代碼。在PHP6中,magic_quotes將被刪除。