ホームページ > バックエンド開発 > PHPチュートリアル > 再帰的addlashes関数を使用して配列をエスケープする

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

WBOY
リリース: 2016-06-23 13:53:57
オリジナル
891 人が閲覧しました

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

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

"; <br> print_r ($arr); <br> <br> <br> <br> フロントページの出力方法 <br> ________________________________________________________ <br> <br> 警告: 無効な引数D:AppServwwwindex.php の 22 行目の foreach() に指定されています <br> 配列 <br> ( <br> [0] => ii" <br> [1] => 配列 <br> ( <br> [one] => ec" <br> [two] => 5 <br> ) <br> <br> [2] => ii" <br> [3] => ii\" <br> ) <br> <br> <br> <br> <br> 自分で比較してください</p>
<p> </p>  FILTER を使用できます <br> <h2> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="sycode" name="code">$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) の元の配列を参照します
}

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート