stripslashes和addslashes的區別

咱們在向mysql寫入數據時,好比:
mysql_query(」update table set `title`=’kuhanzhu’s blog’」);

那就會出錯。同asp時同樣,數據庫都會對單引號過敏。而addslashes在這個時候就最長面子了,跟asp的replace(」‘」,」」」,」kuhanzhu’s blog」)功能同樣。

PHP爲了安全性,因此引入了個magic_quotes_gpc = On的功能,能夠不須要作任何處理就能直接把單引號插入數據庫中,那麼對於Off時,則須要考慮單引號的問題了,而不是一味地信任運行環境。mysql

 

magic_quotes_gpc = On時,使用了addslashes()處理後的數據在數據庫中將以\’形式保存,若是此時直接輸出的話,就會發現比本身期待的內容多了個\,所以stripslashes()出場了,它能把\去掉(區別於str_replace(」\」, 「」,$Str))。sql

 

magic_quotes_gpc = Off時,使用了addslashes()處理後的數據在數據庫中將以’形式保存,沒有上面說的有\的問題,addslashes()起到插入數據不出錯的做用,若是此時直接輸出的話,數據正常。不須要再用stripslashes()。數據庫

 

addslashes()和stripslashes()正好是相反的,直接記憶:addslashes()加個\,stripslashes()去個\安全

 

那麼何時用呢? 簡單說:spa

 

當magic_quotes_gpc = On時,系統會自動處理單引號等問題,用不用addslashes()和stripslashes()都不要緊,可是若是添加數據時用了addslashes(),那麼顯示數據時必需要stripslashes()code

 

當magic_quotes_gpc = Off時,系統不會處理單引號等問題,因此插入數據時必需要使用addslashes(),顯示數據時則不須要使用stripslashes()。blog

 

既然有了分析,作程序時要怎麼辦呢?根據以上兩種狀況,可得:ip

 

無論magic_quotes_gpc是On仍是Off,咱添加數據時都用addslashes(),當On時,必須使用stripslashes(),Off時則不能用stripslashes()。get

 

如何判斷On仍是Off呢?用get_magic_quotes_gpc()。it

 1 代碼 
 2 
 3 //提交數據,或者變量準備:
 4 
 5 $Content=addslashes(」這裏面是數據,無論有沒單引號或者仍是變量」);
 6 
 7 //插入數據到數據庫,代碼省略
 8 
 9 //開始顯示數據
10 
11 $Content=」從數據庫讀取的數據」;
12 
13 if(get_magic_quotes_gpc()){
14   $Content=stripslashes($Content); 
15 }
16 
17 echo $Content;
相關文章
相關標籤/搜索