PHP爲了安全性,因此引入了個magic_quotes_gpc = On的功能,能夠不須要作任何處理就能直接把單引號插入數據庫中,那麼對於Off時,則須要考慮單引號的問題了,而不是一味地信任運行環境。數據庫
當magic_quotes_gpc = On時,使用了addslashes()處理後的數據在數據庫中將以\'形式保存,若是此時直接輸出的話,就會發現比本身期待的內容多了個\,所以stripslashes()出場了,它能把\去掉(區別於str_replace(」\」, 「」,$Str))。安全
當magic_quotes_gpc = Off時,使用了addslashes()處理後的數據在數據庫中將以'形式保存,沒有上面說的有\的問題,addslashes()起到插入數據不出錯的做用,若是此時直接輸出的話,數據正常。不須要再用stripslashes()。spa
addslashes()和stripslashes()正好是相反的,直接記憶:addslashes()加個\,stripslashes()去個\ip
那麼何時用呢?
簡單說:get
當magic_quotes_gpc = On時,系統會自動處理單引號等問題,用不用addslashes()和stripslashes()都不要緊,可是若是添加數據時用了addslashes(),那麼顯示數據時必需要stripslashes()io
當magic_quotes_gpc = Off時,系統不會處理單引號等問題,因此插入數據時必需要使用addslashes(),顯示數據時則不須要使用stripslashes()。變量
既然有了分析,作程序時要怎麼辦呢?根據以上兩種狀況,可得:程序
無論magic_quotes_gpc是On仍是Off,咱添加數據時都用addslashes(),當On時,必須使用stripslashes(),Off時則不能用stripslashes()。數據
如何判斷On仍是Off呢?用get_magic_quotes_gpc()。co
最後舉例:代碼 //提交數據,或者變量準備:$Content=addslashes(」這裏面是數據,無論有沒單引號或者仍是變量」);//插入數據到數據庫,代碼省略//開始顯示數據$Content=」從數據庫讀取的數據」;if(get_magic_quotes_gpc()){ $Content=stripslashes($Content); }echo $Content;