0

行。我编写了一个简单的(ish)函数来获取一个参数并返回相同的参数,并将危险的 html 字符替换为它们的字符实体。

该函数可以将字符串、数组或 2D 数组作为参数 - 不支持 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 字符取回所有​​值。因此,显然,数组中的键将是数据库字段的名称,而我目前的功能是将它们替换为数值。

所以是的,我需要取回传递给函数的相同参数,数组键仍然完好无损(如果传递了一个数组)。

希望这是有道理的,建议表示赞赏。

4

2 回答 2

3

您可以使用递归而不是嵌套的 foreaches 负载:

function html_safe($input) {
    if (is_array($input)) {
        return array_map('html_safe', $input);
    } else {
        return htmlspecialchars($input);
    }
}
于 2009-09-11T16:03:19.160 回答
1

好吧,我想我自己已经想出了这个......

我的 foreach 循环没有指定任何键,例如它们是:

foreach($array_val as $val)

代替:

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

在这种情况下,我可以在输出数组中保留数组键。

于 2009-09-11T15:30:22.060 回答