确定。我写了一个简单的(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字符安全地获取所有值。因此,显然,数组中的键将是数据库字段的名称,目前我的函数正在用数值替换它们。
所以是的,我需要返回传递给函数的相同参数,数组键仍然完整(如果传递了数组)。
希望有意义,建议赞赏。
答案 0 :(得分:3)
您可以使用递归而不是嵌套大量的foreaches:
function html_safe($input) {
if (is_array($input)) {
return array_map('html_safe', $input);
} else {
return htmlspecialchars($input);
}
}
答案 1 :(得分:1)
好的,我想我自己想出了这个......
我的foreach循环没有指定任何键,例如:
foreach($array_val as $val)
而不是:
foreach($array_val as $key => $val)
在这种情况下,我可以在输出arrrays中保留数组键。