網站製作學習誌

記錄學習製作網站的一切

關於 Magic Quotes

「許功蓋」的問題一直困擾著許多程式設計師,原因和 magic quotes 有非常大的關係。以下介紹個可行的解決方案,請自行參考運用。

在 PHP5 裡,預設是不開啟 magic quotes 的,如果開啟的話,系統就會幫你的特殊字元加入 '\' 。

但是這樣會造成程式裡處理的困擾,畢竟我們不希望時時刻刻地去想什麼時候用 addslashes ,什麼時候用 stripslashes 。

所以如果有已經打開了 magic quotes ,可參考 http://www.php.net/manual/en/function.get-magic-quotes-gpc.php 的第一篇 User Contributed Notes,把相關的系統變數回復為沒有開啟 magic quotes 的狀態,然後在程式必要的地方再自行處理。

你也可以在程式的最開頭,直接用以下這個簡單的程式片段來處理 GPC 變數:

1
2
3
4
5
6
7
// 去除 Magic Quotes 的影響
if (get_magic_quotes_gpc()) {
    $_GET = array_map('stripslashes', $_GET);
    $_POST = array_map('stripslashes', $_POST);
    $_COOKIE = array_map('stripslashes', $_COOKIE);
    $_REQUEST = array_map('stripslashes', $_REQUEST);
}

假如程式裡用到了 PEAR::DB 加上 MySQL 4.0 或是 MSSQL 的話,那麼可以使用 prepare 及 execute 方法來協助你處理這些特殊字元。它會判斷資料庫的型態,自行呼叫相關的函式來幫你解決 magic quotes 的問題。

Comments