我們知道在php中addslashes函數是一個安全過濾函數,可以對接受到的變量進行轉義以安全的入庫了,但如果我們是以數組形式傳參數過來,直接使用此函數無法進行操作了,下面我們一起來看看實現方法.
一、函數主要了addslashes 方法
addslashes() 函數在指定的預定義字符前添加反斜杠,這些預定義字符是:
•單引號 (')
•雙引號 (")
•反斜杠 (\)
•NULL
二、array_map 說明
array_map() 函數返回用戶自定義函數作用后的數組,回調函數接受的參數數目應該和傳遞給 array_map() 函數的數組數目一致,如果傳遞進來的參數 是數組形式則使用array_map方法進行參數的轉義.
我們在開發對于$_GET,$_POST等變量,代碼如下:
- /**
- * 遞歸方式的對變量中的特殊字符進行轉義
- *
- * @access public
- * @param mix $value
- *
- * @return mix
- */
- function addslashes_deep($value)
- {
- if (emptyempty($value))
- {
- return $value;
- }
- else
- {
- return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
- }
- }
如果是數組將無法完成安全轉義了,下面整理了一個例子,大家來看看.
方法三,可以參考該遞歸方法實現其他功能,代碼如下:
- <?php
- $arr = array('a"aa',array("c'd",array('e"f')));
- function changes($arr){
- foreach($arr as $k=>$v){
- if (is_string($v)){
- $arr[$k] = addslashes($v);
- }else if (is_array($v)) { //若為數組,則再轉義.
- $arr[$k] = changes($v);
- } //開源軟件:Vevb.com
- }
- return $arr;
- }
- print_r(changes($arr));
- ?>
- //輸入結果如下:
- Array
- (
- [0] => a\"aa
- [1] => Array
- (
- [0] => c\'d
- [1] => Array
- (
- [0] => e\"f
- )
- )
- )
原理是非常的簡單,就是把數據利用foreach遍歷一個個數組值進行操作了.
新聞熱點
疑難解答