2012-07-15 162 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; 
}