使用filter_var_array进行Sanitize-防止NULL变为空字符串


Sanitize using filter_var_array - prevent NULL from turning into empty string

我有一个MySQL结果,我想使用PHP安全地输出,即将特殊字符(如<)转换为&lt;

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>';
}

有什么方便的方法可以实现这一点吗?

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

根据我的经验,当从MySQL中选择NULL值时,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;
}