2012-07-15 41 views
1

我有一個MySQL結果,我想用PHP安全輸出,即將特殊字符(如<)轉換爲&lt;使用filter_var_array進行清理 - 防止NULL變爲空字符串

filter_var_array工作得很好,除了NULL值變成空字符串''

我還是希望他們能爲NULL,以反映MySQL的價值,並與is_null()

$sql_rows = filter_var_array($sql_rows, FILTER_SANITIZE_FULL_SPECIAL_CHARS); 
foreach ($sql_rows as $sql_row) { 
    print '<li>' . $sql_row['name'] . '</li>'; 
} 

測試任何方便的方法來實現這一目標?

+0

有這樣做的什麼神奇的方法。你需要手動處理每個變量 – zerkms 2012-07-15 22:43:27

+0

那麼你的問題是什麼? – DrinkJavaCodeJava 2012-07-15 22:44:49

+0

然後你需要一個自定義函數。 'filter_var'是關於清理** string **變量的。 – mario 2012-07-15 22:47:28

回答

0
$sql_rows = array_map(function($val){ 
    return is_null($val) ? null : filter_var($val, FILTER_SANITIZE_FULL_SPECIAL_CHARS); 
}, $sql_rows); 
+0

無法正常工作,請參閱上面的我的評論。 – Mahn 2012-07-15 23:24:09

+0

這樣的事情呢,它看起來好嗎/高效? 'function sanitize_custom_single($ input){return is_null($ input)? null:filter_var($ input,FILTER_SANITIZE_FULL_SPECIAL_CHARS); }'和'函數sanitize_custom_array($ input){array_walk_recursive($ input,'sanitize_custom_single');返回$ input; }' – elaxsj 2012-07-16 10:49:57

+1

嗯。 「array_walk_recursive」的手冊頁說:「任何保存數組的鍵都不會傳遞給函數。」也許部份是更好:'函數sanitize_custom_array($輸入){如果(is_array($輸入)){返回array_map( 'sanitize_custom_array',$輸入); } else {return is_null($ input)? null:filter_var($ input,FILTER_SANITIZE_FULL_SPECIAL_CHARS); }} – elaxsj 2012-07-16 11:12:07

1

從我的經驗,當一個NULL值從選定的MySQL,PHP解釋爲一個空白字符。我只是在一個循環中處理並輸出每一行;你將對每個值發生的變化有更多的控制,而且效率更高。

foreach($sql_rows as $sql_row) 
{ 
    $output = "<li>"; 

    if(!empty($sql_row['name'])) 
    { 
     $output .= htmlspecialchars($sql_row['name'], ENT_QUOTES); 
    } 
    else 
    { 
     $output .= "<strong>NULL</strong>"; 
    } 

    $output .= "</li>"; 

    echo $output; 
}