PHP的escape函數(shù),顧名思義就是將一些特殊的字符進行轉(zhuǎn)義,以避免可能的安全問題。而它的解碼函數(shù)則可以將轉(zhuǎn)義后的字符串,還原成原來的字符串。在編寫PHP的程序中,escape解碼函數(shù)是常用的函數(shù)之一。
舉個簡單的例子,假如你需要從數(shù)據(jù)庫中提取一個字符串,而該字符串中存在單引號‘和雙引號“等特殊字符,如果直接輸出該字符串,就會導致SQL語句出錯,為了解決這個問題,可以使用PHP中的escape函數(shù)一一轉(zhuǎn)義。如下:
$str = "It's a \"good\" day"; $str = mysqli_real_escape_string($link, $str); //先將字符串轉(zhuǎn)義 echo "SELECT * FROM tbl_user WHERE nickname = '{$str}'"; //再使用轉(zhuǎn)義后的字符串
執(zhí)行結(jié)果如下:
SELECT * FROM tbl_user WHERE nickname = 'It\'s a \"good\" day'
假如我們現(xiàn)在接收到一串經(jīng)過序列化后的字符串,再次使用unserialize函數(shù)還原時,就會發(fā)現(xiàn)某些字符串里的特殊字符都被轉(zhuǎn)義了。這種情況下,我們就可以使用escape的解碼函數(shù)進行還原。如下:
$str = 'a:3:{s:4:"name";s:5:"little";s:3:"age";s:2:"20";s:6:"school";s:21:"China University of \\n Technology";}'; $str = stripslashes($str);//去除轉(zhuǎn)義斜杠 $arr = unserialize($str); print_r($arr);
執(zhí)行結(jié)果如下:
Array ( [name] =>little [age] =>20 [school] =>China University of \n Technology )
需要注意的是,解碼函數(shù)的使用必須有條件,最典型的例子就是單引號與雙引號的轉(zhuǎn)義。escape函數(shù)會自動將單引號和雙引號以及反斜杠進行轉(zhuǎn)義,在一些場合下可能造成不必要的麻煩,而解碼函數(shù)同樣不能讓你在恢復之后,忽略了這樣的影響。
總之,PHP中的escape解碼函數(shù)可以幫助程序員解決一些轉(zhuǎn)義后的字符串無法使用的問題,這是PHP編程中必不可少的一個函數(shù),非常有用。
下一篇php esearch