http://www.poluoluo.com/jzxy/201208/172927.html php
在ThinkPHP中提交表單插入數據的時候,單引號和雙引號是會被自動轉義的,就是會自動的加上反斜線, html
可是我不想給單引號和雙引號加上反斜線, mysql
如:hds」gh」j’g’h sql
會被自動轉義爲:hds\」gh\」j\’g\’h thinkphp
請注意須要的是取消這個轉義的功能,而不是使用stripslashes() 函數刪除這些反斜槓,即不須要官方的這個自動轉義的功能。 數據庫
因此在網上搜索到解決方法: 安全
1,在thinkphp目錄下,依次打開 ThinkPHP\Lib\Driver\Db 目錄,並在dbmysql.class.php 這個文件中把escapeString 函數的函數修改爲: 服務器
/** * SQL指令安全過濾 * @access public * @param string $str SQL字符串 * @return string */ public function escapeString($str) { //修改 周蠻子 放雙引號雙重轉義 if (!get_magic_quotes_gpc()){ if($this->_linkID) { return mysql_real_escape_string($str,$this->_linkID); }else{ return mysql_escape_string($str); } } else { return $str; } }
原函數: 編輯器
/** * SQL指令安全過濾 * @access public * @param string $str SQL字符串 * @return string */ public function escapeString($str) { //修改 周蠻子 放雙引號雙重轉義 if($this->_linkID) { return mysql_real_escape_string($str,$this->_linkID); }else{ return mysql_escape_string($str); } }
//防止雙重轉義 if (get_magic_quotes_gpc()) { function stripslashes_deep($value){ $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; } $_POST = array_map('stripslashes_deep', $_POST); $_GET = array_map('stripslashes_deep', $_GET); $_COOKIE = array_map('stripslashes_deep', $_COOKIE); }
通過修改後,個人網站程序後臺錄入就沒什麼問題了。看來你們以後若是有碰到使用Thinkphp時,注意若是服務器開啓了過濾單引號或雙引號的,可能就會跟ThinkPHP起衝突的了。因此加一層判斷,就能夠很好的解決這個問題了。 函數