《PHP學習:ThinkPHP入庫出現兩次反斜線轉義及數據庫類轉義的解決方法》要點:
本文介紹了PHP學習:ThinkPHP入庫出現兩次反斜線轉義及數據庫類轉義的解決方法,希望對您有用。如果有疑問,可以聯系我們。
本文實例講述了ThinkPHP入庫出現兩次反斜線轉義及數據庫類轉義的解決辦法.分享給大家供大家參考.具體辦法如下:PHP教程
這種情況是在 magic_quotes_gpc 開啟的情況下發生的.原因是thinkphp在入庫的時候沒有判斷 magic_quotes_gpc 是否開啟,不管三七二十一地進行了轉義處理.
解決方法是在入口文件增加如下代碼則可:PHP教程
代碼如下:
if (!get_magic_quotes_gpc()) {?
??? function addslashes_deep($value) {??
??????? $value = is_array($value) ??
??????????? array_map('addslashes_deep', $value) :?
??????????? addslashes($value);?
??????? return $value;?
?? }?
?? $_POST = array_map('addslashes_deep', $_POST);?
?? $_GET = array_map('addslashes_deep', $_GET);?
?? $_COOKIE = array_map('addslashes_deep', $_COOKIE);?
?? $_REQUEST = array_map('addslashes_deep', $_REQUEST);?
}
有人這樣修改DbMysql.class.php中的轉義函數:PHP教程
代碼如下:
public function escape_string($str) {?
if (get_magic_quotes_gpc()) {?
return $str;?
}?
if($this->_linkID) {?
return mysql_real_escape_string($str,$this->_linkID);
}else{?
return mysql_escape_string($str);?
}?
}
?
其實這種辦法并不可取!因為如果魔術函數on時,而$str又不是post或get得來(比如讀取文本、數據庫),它還是沒加反斜線.
所以我不管$str是否已經被轉義,一律先去除轉義,然后再加上轉義.這樣就避免了二次轉義,也避免了遺漏轉義.
下面是我的修改辦法:PHP教程
代碼如下:
public function escape_string($str) {?
$str = stripslashes($str);?
if($this->_linkID) {?
return mysql_real_escape_string($str,$this->_linkID);?
}else{?
return mysql_escape_string($str);?
}?
}
希望本文所述對大家的ThinkPHP框架程序設計有所贊助.PHP教程
歡迎參與《PHP學習:ThinkPHP入庫出現兩次反斜線轉義及數據庫類轉義的解決方法》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/14231.html