2009-09-11 20 views
0

好的。我已經寫了一個簡單的(ish)函數來接受一個參數並返回相同的參數,而危險的html字符替換爲它們的字符實體。如何在保留相同密鑰的情況下複製陣列?

該函數可以將字符串,數組或二維數組作爲參數 - 不支持3d數組或更多數組。

的功能如下:

public function html_safe($input) 
{ 
    if(is_array($input)) //array was passed 
    { 
     $escaped_array = array(); 
     foreach($input as $in) 
     { 
      if(is_array($in)) //another array inside the initial array found 
      { 
       $inner_array = array(); 
       foreach($in as $i) 
       { 
        $inner_array[] = htmlspecialchars($i); 
       } 
       $escaped_array[] = $inner_array; 
      } 
      else 
       $escaped_array[] = htmlspecialchars($in); 
     } 
     return $escaped_array; 
    } 
    else // string 
     return htmlspecialchars($input); 
} 

此功能的工作,但問題是,我需要保持原有數組的數組鍵。

這個函數的目的是爲了讓我們可以從數據庫查詢字面上傳遞一個結果集,並返回所有帶有HTML字符的值。因此,顯然,數組中的鍵將是數據庫字段的名稱,而我目前的函數正在用數字值替換它們。

所以是的,我需要找回傳遞給函數的數組鍵仍然完好無損(如果數組已被傳遞)。

希望有道理,建議表示讚賞。

回答

3

您可以使用遞歸而非嵌套foreaches負荷:

function html_safe($input) { 
    if (is_array($input)) { 
     return array_map('html_safe', $input); 
    } else { 
     return htmlspecialchars($input); 
    } 
} 
+0

嘿,這工作在當地,但是當我部署到開發環境,我得到了以下錯誤: 警告:array_map()[function.array -map]:第一個參數'html_safe'應該是NULL或在第16行的... \ www \ include \ security.php中有效的回調 – Evernoob 2009-09-14 08:16:47

+0

@Evernoob:奇怪,PHP版本是一樣的嗎? – 2009-09-14 10:25:01

1

好吧,我想我已經想通了這出自己...

我foreach循環沒有例如指定的任何鍵它們分別爲:

foreach($array_val as $val) 

代替:

foreach($array_val as $key => $val) 

在這種情況下,我可以在輸出數組中保留數組鍵。

相關問題