用递归addslashes函数转义数组-is_string

PHP 判断变量类型实现代码_PHP教程

...ame, $fieldVal, $condition) { try { if (!is_array($fieldVal) || !is_string($tName) || !is_string($condition)) exit($this->getError(__FUNCTION__, __LINE__)); $tName = $this->formatTabName($tName); $upStr = ''; foreach ($fieldVal as $k=>$v) { ...

有个一个数组,可能是多维的,里面有些值带有特殊符号 比如“ 我用递归加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的PDO常用类库实例详解

...ame, $fieldVal, $condition) { try { if (!is_array($fieldVal) || !is_string($tName) || !is_string($condition)) exit($this->getE

PHP查看当前变量类型的方法_PHP教程

... is_real is_resource is_scalar is_string 列子:

PHP值mysql操作类,php值mysql_PHP教程

... public function field($filed){ //拆分字段 $filedArr=is_string($filed)?explode(",",$filed):$filed; if(is_array($filedArr)){

php 查看当前变量类型的方法汇总

...参考:PHP: gettype – ManualPHP: is_string – ManualPHP: is_int – Manual所以去试试:$respJson = $crifanLib->getUrlRespHtml($getTokenUrl); $crifanLib->lo

PHP实现非对称加密

...密 * */ public function privEncrypt($data) { if (!is_string($data)) { return null; } $this->setupPriv

变量类型 PHP 判断变量类型实现代码

...例如:gettype(),is_array(),is_float(),is_int(),is_object() 和 is_string()。 复制代码 代码如下:

php中RSA2签名算法的实例分享

...39;') { // var_dump(self::getPrivateKey());die; if (!is_string($data)) { return null; }

PHP查看当前变量类型的方法_PHP

...Write("respJson=%s", $respJson); echo gettype($respJson); echo is_string($respJson); echo "before decodedJsonObj"; $decodedJsonObj = json_decode($r

PHP查看当前变量类型的方法,php查看当前变量_PHP教程

...>参考: PHP: gettype – Manual PHP: is_string – Manual PHP: is_int – Manual 所以去试试: 复制代码 代码如下: $respJson = $crifanLib->getUrlRespHtml($getTokenUrl); $cr

PHP 判断变量类型实现代码_PHP

...例如:gettype(),is_array(),is_float(),is_int(),is_object() 和 is_string()。 复制代码 代码如下: