thinkphp使用Ueditor編輯器寫入數據庫單雙引號轉義問題

http://www.poluoluo.com/jzxy/201208/172927.html php

thinkphp使用Ueditor編輯器寫入數據庫單雙引號轉義問題

Posted by 蕭貓 on 十二月 18, 2013
開發備忘/語錄

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

2,在公共文件中加入:

//防止雙重轉義 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再次轉義,就會在程序中產生雙重轉義的Bug。(以上兩種方法任選一種便可實現,筆者親測第一種方法。)

通過修改,個人網站程序臺錄入就沒什麼問題了。看來你們以若是有碰到使用Thinkphp時,注意若是服務器開啓了過濾單引號或雙引號的,可能就會跟ThinkPHP起衝突的了。因此加一層判斷,就能夠很好的解決這個問題了。 函數

Tags: thinkphp, ueditor, 雙引號, 轉義

相關文章
相關標籤/搜索