我正在编写一个大脚本,它将生成一些字符串或数组或多维数组我想使用 mysql_real_escape_string
用于所有数组/字符串为此,我尝试了下面的代码
function check($data) {
if(!is_array($data)) {
return mysql_real_escape_string($data);
} else if (is_array($data)) {
$newData = array();
foreach($data as $dataKey => $dataValue){
if(!is_array($dataValue)){
$key = mysql_real_escape_string($dataKey);
$value = mysql_real_escape_string($dataValue);
$newData[$key] = $value;
}
}
return $newData;
}
}
如果我像这样使用check('saveme');
,返回值
如果我传递一个数组,它返回当前值[check(array('a','b','c',1,2,3))
]
如果我传递多维数组,我得到[check(array(array('a',array('a','b','c',1,2,3),'c',1,2,3),'b',array('a','b','c',1,2,3),1,2,3))
]
我想使用mysql_real_escape_string数组键。
您可以使用array_walk_recursive函数,抛出数组的所有叶子,并转义值:
array_walk_recursive($array, function(&$leaf) {
if (is_string($leaf))
$leaf = mysql_real_escape_string($leaf);
});
另外,最好遵循数据一致性规则,不要使用!is_array()
,而是使用is_string()
,因为mysql_real_escape_string
接受string
参数,而不是!string
。
不幸的是,array_walk_recursive
被设计成不能编辑keys
。如果需要编辑键,可能需要编写自己的递归函数。我不想复制答案,你可以在这里找到
你可以使用这个函数:
(MyStringEscapeFunc()是您的自定义转义函数)
function escape_recursive($arr){
if(is_array($arr)){
$temp_arr = array();
foreach ($arr as $key=>$value){
$temp_arr[MyStringEscapeFunc($key)] = escape_recursive($value);
}
return $temp_arr;
}else{
return MyStringEscapeFunc($arr);
}
}
示例结果:
//Before :
Array (
[0] => Array (
[0] => foo'bar
[1] => bar'baz
)
[1] => foob'ar
[2] => Array ( [foo'baz] => baz'foo )
)
//After :
Array (
[0] => Array (
[0] => foo'bar
[1] => bar'baz
)
[1] => foob'ar
[2] => Array ( [foo'baz] => baz'foo )
)