php addslashes 数组,用递归addslashes函数转义数组

有个一个数组,可能是多维的,里面有些值带有特殊符号 比如“ 我用递归加addslashes()转义

没有达到效果 帮忙看看哪错了

$arr=array('ii"',array('one'=>'ec"','two'=>5));

function t(&$arr){

foreach($arr as $v){

if(is_string($v)){

$arr[]=addslashes($v);

}else{

t($v);

}

}

}

t($arr);

echo "";

print_r($arr);

echo '';

前台页面是这么输出的

________________________________________________________

Warning: Invalid argument supplied for foreach() in D:\AppServ\www\index.php on line 22

Array

(

[0] => ii"

[1] => Array

(

[one] => ec"

[two] => 5

)

[2] => ii\"

[3] => ii\\\"

)

回复讨论(解决方案)

你自己对比下$arr=array('ii"',array('one'=>'ec"','two'=>5),'aa"a');function t(& $arr){ foreach($arr as $k => $v){ if(is_string($v)){ $arr[$k] = addslashes($v); }else{ $arr[$k] = t($v); } } return $arr;}t($arr);echo "";print_r($arr);echo '';

可以用 FILTER

$arr = array('ii"',array('one'=>"ec'",'two'=>5));array_walk_recursive($arr, function(&$v) { $v = addslashes($v);} );print_r($arr); Array( [0] => ii\" [1] => Array ( [one] => ec\' [two] => 5 ))

你的代码要这样改$arr=array('ii"',array('one'=>'ec"','two'=>5));function t(&$arr){ foreach($arr as $i=>&$v){ if(is_array($v)){ t($v); }else{ $arr[$i] = addslashes($v); } }}t($arr);print_r($arr);

改成??就可以了。function t(&$arr){foreach($arr as $key=>$v){if(is_string($v)){$arr[$key]=addslashes($v);}else{t($arr[$key]);}}}

我比较喜欢捣乱function t(&$arr){ foreach($arr as $key=>$v){ if(is_string($v)){ $arr[$key]=addslashes($v); }else{ t($arr[$key]); } }}$arr=array('ii"',array('one'=>'ec"','two'=>5));t($arr);Invalid argument supplied for foreach()

改成??就可以了。function t(&$arr){foreach($arr as $key=>$v){if(is_string($v)){$arr[$key]=addslashes($v);}else{t($arr[$key]);}}}

再改一下。function t(&$arr){ foreach($arr as $key=>$v){ if(is_array($v)){ t($arr[$key]); }else{ $arr[$key]=addslashes($v);} }} $arr=array('ii"',array('one'=>'ec"','two'=>'5'));t($arr);print_r($arr);

谢谢楼上几位大神的耐心解答,你们提供的答案都正确,但是并没有指出我的问题所在。我看了一天的代码,终于发现我写的代码问题所在:报错的原因是,$arr=array('ii"',array('one'=>'ec"','two'=>5));我提供的参数进入到函数体内后最有'two'=>5递归到foreach不是一个数组,所以报为foreach提供了无效参数的警告

$arr=array('ii"',array('one'=>'ec"','two'=>5));

function t(&$arr){

foreach($arr as $v){

if(is_string($v)){

$arr[]=addslashes($v); //这里如果用$arr[]只能是在原数组情况下添加了元素

}else{

t( $v); //这里$v打印出来是array('one'=>'ec"','two'=>5) 当它递归重新走到foreach里面已经不是$arr原数组了,是和$arr完全不相关的一个新数组

}

}

}

如下面的写就ok啦!

$arr=array('ii"',array('one'=>'ec"','two'=>5));

function t(&$arr){

foreach($arr as $k=>$v){

if(is_string($v)){

$arr[$k]=addslashes($v);

}else{

if( is_array($v)){ //加上判断后就可以关闭为foreach提供了无效参数的警告

t( $arr[$k]); //这里指的是原数组foreach出来的array('one'=>'ec"','two'=>5)

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值