ホームページ >バックエンド開発 >PHPチュートリアル >再帰的addlashes関数を使用して配列をエスケープする
配列があり、これは多次元である可能性があります。その中の一部の値には特殊な記号が含まれています。たとえば、「再帰と 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 が無効なパラメーターを指定したという警告が報告されました
function t(&$arr){
foreach($arr as $v){
if(is_string($v )){
}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) の元の配列を参照します
}