如何正確的理解php轉義是乙個初學者比較困擾的問題。我們今天為大家簡要的講述了php轉義的具體含義,希望有所幫助。php轉義一直困擾著我, 今天認真的看了一下php手冊, 終於解決了.
在php中預設有乙個"魔術引號"的開關, 如果這個開關開啟, 從外部轉入的$_get, $_get, $cookie都會php轉義.
比如:http://localhost/test.php?test=1'
然後在test.php輸出時自動轉義, 輸出如下:
var_dump($_get['test'];
*****===output*****==
string(3) "1\'"
所示 ' 號被加入了\轉義了.但這裡有乙個問題, 當將這個值輸出到網頁時會看到滿屏的\, 這裡可以使用另乙個函式, stripslashes 可以將\去除.
在手冊中的php轉義意思是說推薦不要開啟"魔術引號" 因為效率問題, 不這也有乙個好處, 就是可以非常安全, 對於我這樣的新手來說.
關閉"魔術引號有三個方法, 因為這個是不可以php執行進關閉的, 也就是說不可以用ini_set().
1. 對php.ini設定.
magic_quotes_gpc = off
magic_quotes_runtime = off
magic_quotes_sybase = off
2. 如果對系統無法修改可以使用 .htaccess
php_flag magic_quotes_gpc off
3. 效率***的php轉義方法
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);
這裡還要提到乙個關於 sql語句中有like時對%的處理, 因為addslashes對% _ 是不轉義的, 且這兩個字元在別的sql語句也本來也不用轉義的, 所以我編了乙個函式 like_esc($value), 當有like語句時才使用.
對於輸出到網頁的先用stripslashes去\還要用htmlspecialchars轉義一下.
我現在有乙個比較懶的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);
點讚 0
如何正確理解PHP的錯誤資訊
我們編寫程式時,無論怎樣小心謹慎,犯錯總是在所難免的。這些錯誤通常會迷惑php編譯器。如果開發人員無法了解編譯器報錯資訊的含義,那麼這些錯誤資訊不僅毫無用處,還會常常讓人感到沮喪。編譯php指令碼時,php編譯器會盡其所能報告它遇到的第乙個問題。這樣就產生乙個問題 只有當錯誤出現時,php才能將它識...
如何正確理解PHP的錯誤資訊
我們編寫程式時,無論怎樣小心謹慎,犯錯總是在所難免的。這些錯誤通常會迷惑php編譯器。如果開發人員無法了解編譯器報錯資訊的含義,那麼這些錯誤資訊不僅毫無用處,還會常常讓人感到沮喪。編譯php指令碼時,php編譯器會盡其所能報告它遇到的第乙個問題。這樣就產生乙個問題 只有當錯誤出現時,php才能將它識...
Linux inode的正確理解
理解inode,要從檔案儲存說起。檔案儲存在硬碟上,硬碟的最小儲存單位叫做 扇區 sector 每個扇區儲存512位元組 相當於0.5kb 作業系統讀取硬碟的時候,不會乙個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取乙個 塊 block 這種由多個扇區組成的 塊 是檔案訪問的...