2010-08-06 40 views
7

我需要stripslashes陣列的所有項目一次。如何一次剝取數組的所有項目?

任何想法我該怎麼做?

+0

請注意,到目前爲止大多數答案都會盲目地將所有內容都轉換爲字符串。根據您的需求,這可以是一個專業或一個騙局。 – 2016-07-08 11:28:08

回答

21
foreach ($your_array as $key=>$value) { 
$your_array[$key] = stripslashes($value); 
} 

或多個級別陣列使用:

function stripslashes_deep($value) 
{ 
    $value = is_array($value) ? 
       array_map('stripslashes_deep', $value) : 
       stripslashes($value); 

    return $value; 
} 


$array = array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar")); 
$array = stripslashes_deep($array); 

print_r($array); 
+0

我不可能給你足夠的upvotes爲這:)在花了整整一天的時間嘗試每一個解決方案,我可以找到並想到(在jQuery和PHP)解決該死的雙引號轉義該死的JSON對象,您的解決方案工作像一個魅力! :) – Aleksej 2016-04-03 19:39:09

5

您可以使用array_map

$output = array_map('stripslashes', $array); 
+0

這給出了警告:stripslashes()期望參數1是字符串, – Starx 2010-08-06 09:58:04

+0

@jdoef:所以你的數組不僅包含字符串? – Gumbo 2010-08-06 10:14:45

+0

不是必需的。不能腳本檢查它是否是字符串,然後只去掉斜槓 – Starx 2010-08-06 10:24:46

0

解析陣列recursevely,這個解決方案,您不必dublicate您的陣列

function addslashes_extended(&$arr_r){ 
    if(is_array($arr_r)) 
    { 
     foreach ($arr_r as &$val){ 
      is_array($val) ? addslashes_extended($val):$val=addslashes($val); 
    } 
     unset($val); 
    } 
    else 
     $arr_r=addslashes($arr_r); 
return $arr_r; 
} 
11

對於一維數組,array_map會做:

$a = array_map('stripslashes', $a); 

對於多維數組,你可以這樣做:

$a = json_decode(stripslashes(json_encode($a)), true); 

這最後一個可以用來修復magic_quotes的,請參閱this comment

+0

這很棒。 – Jake 2012-06-20 06:39:17

3

我發現這個類/函數

<?php 
/** 
* Remove slashes from strings, arrays and objects 
* 
* @param mixed input data 
* @return mixed cleaned input data 
*/ 
function stripslashesFull($input) 
{ 
    if (is_array($input)) { 
     $input = array_map('stripslashesFull', $input); 
    } elseif (is_object($input)) { 
     $vars = get_object_vars($input); 
     foreach ($vars as $k=>$v) { 
      $input->{$k} = stripslashesFull($v); 
     } 
    } else { 
     $input = stripslashes($input); 
    } 
    return $input; 
} 
?> 

這個blog,它真的幫助了我,現在我可以傳遞變量,數組和通過同一個函數對象...

+0

+1,尼斯謝謝 – Starx 2013-04-11 07:16:22

-1

任何遞歸爲陣列功能:

$result= Recursiver_of_Array($array, 'stripslashes');

代碼:

function Recursiver_of_Array($array,$function_name=false){ 
    //on first run, we define the desired function name to be executed on values 
    if ($function_name) { $GLOBALS['current_func_name']= $function_name; } else {$function_name=$GLOBALS['current_func_name'];} 
    //now, if it's array, then recurse, otherwise execute function 
    return is_array($array) ? array_map('Recursiver_of_Array', $array) : $function_name($array); 
} 
+0

我認爲12K用戶的回答必須更具描述性,而不是太大聲。 – Starx 2016-07-21 08:45:55

相關問題