ホームページ  >  記事  >  バックエンド開発  >  再帰的addlashes関数を使用して配列をエスケープする

再帰的addlashes関数を使用して配列をエスケープする

WBOY
WBOYオリジナル
2016-06-23 13:53:57879ブラウズ

配列があり、これは多次元である可能性があります。その中の一部の値には特殊な記号が含まれています。たとえば、「再帰と addslashes() を使用してエスケープしました。

効果は得られませんでした。検索を手伝ってください。」何が問題なのかを調べてください。
$arr=array('ii"' ,array('one'=>'ec"','two'=>5)); ($arr as $v){
if(is_string($v )){
$arr[]=addslashes($v)
}else{
}
}
}
t( $arr);
echo "e03b848252eb9375d56be284e690e873";
print_r ($arr);



フロントページの出力方法
________________________________________________________

警告: 無効な引数D:AppServwwwindex.php の 22 行目の foreach() に指定されています
配列
(
[0] => ii"
[1] => 配列
(
[one] => ec"
[two] => 5
)

[2] => ii"
[3] => ii\"
)




自分で比較してください

FILTER を使用できます

$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 "<pre class="brush:php;toolbar:false">";print_r($arr);echo '
';
$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);

foreach() に指定された

function t(&$arr){	foreach($arr as $key=>$v){		if(is_string($v)){			$arr[$key]=addslashes($v);		}else{			t($arr[$key]);		}	}}
Invalid 引数をいじるのが好きです

ただ変更してくださいそれ

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);


もう一度変更してください

function t(&$arr){	foreach($arr as $key=>$v){		if(is_string($v)){			$arr[$key]=addslashes($v);		}else{			t($arr[$key]);		}	}}


あなたが提供してくれた答えはすべて正しいですが、彼らは私の問題を指摘していませんでした。私は 1 日かけてコードを読み、ついに自分が書いたコードの問題を発見しました。エラーの理由は $arr=array('ii"',array('one'=>'ec"','two) でした。 '=> 5)); 指定したパラメーターが関数本体に入った後、foreach への再帰が 'two'=>5 となり、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 とはまったく関係のない新しいものです
}
}
}


$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('one'=>'ec"','two'=>5) の元の配列を参照します
}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。