php的addslashes函數用來轉義字符串中的特殊字符,防止數據庫中的注入攻擊。而在處理數組中的字符串時,我們可以使用addslashes函數的數組版本——addslashes_array,但實際上這個函數并不存在。那么該如何處理數組中的字符串呢?本文將對這一問題進行講解。
我們先來看一下addslashes函數的用法:它的參數是一個字符串,返回值也是一個字符串。比如我們有一個字符串$name,它可能會包含單引號、雙引號、反斜杠等特殊字符,我們可以使用addslashes函數來將它轉義:
$name = "O'Connor"; $name = addslashes($name);
這樣,$name就會被轉義為"O\'Connor",可以放心地用于數據庫操作。 那么當我們想對一個數組進行轉義時,我們可以考慮使用foreach循環來遍歷數組中的每一個元素,再一個一個調用addslashes函數。具體代碼如下:
foreach ($array as $key =>$value) { $array[$key] = addslashes($value); }
這段代碼會遍歷數組$array中的每個元素,將其轉義之后再賦值給原數組中相應的元素。 不過如果我們要在多個地方多次使用這段代碼,說不定就想把它封裝成函數,以便于調用。我們來試著寫一個addslashes_array函數來實現這個功能:
function addslashes_array($arr) { foreach ($arr as $key =>$value) { $arr[$key] = addslashes($value); } return $arr; }
我們開心地測試這個函數,卻發現它并不能將數組中的元素轉義!仔細一想,原來是因為函數的參數是一個值傳遞的,也就是說我們將數組復制一份來傳遞,而不是將原數組引用過來。這樣做會導致轉義后的數組并沒有賦值給原數組,于是就出了問題。 那么我們應該怎樣修改這個函數,才能讓它正確地轉義數組中的元素呢?我們可以使用引用傳遞的方式,將原數組的引用傳遞給函數的形參,這樣函數中對數組的操作就會直接反映到原數組上。修改后的addslashes_array函數代碼如下:
function addslashes_array(&$arr) { foreach ($arr as $key =>$value) { $arr[$key] = addslashes($value); } }
這次我們再次運行測試代碼,發現程序已經能夠正確地將入參數組中的元素轉義了。這樣就解決了我們遇到的問題。 總的來說,處理數組中的字符串和處理單個字符串有些不同,需要特別注意到變量傳遞的方式以及數組元素的遍歷方法。既然PHP中并沒有提供addslashes_array這樣的函數,我們就需要自己編寫代碼實現這個功能。如果多次使用,不妨將其封裝成一個可以重復調用的函數,提高代碼的復用性。