【问题标题】:PHP array and htmlentitiesPHP 数组和 htmlentities
【发布时间】:2015-08-07 05:51:33
【问题描述】:
$_POST=

Array ( [0] => aaa@gmail.com [1] => bbb [2] => ccc [3] => ddd [4] => eee [5] => fff [6] => ggg [7] => hhh [8] => iii [9] => jjj [10] => 31 [11] => k )

foreach($_POST as $key => $val){
    for ($key = 0; $key <= 9;$key++){
        $_POST2[$val] = htmlentities($_POST[$val]);
    }
}
}

这是我的代码,我想要将$_POST 数组拆分为$key$val。然后我想告诉程序,随着$key 上升1,将htmlentities() 放在$val 周围。 你能帮我么?我已经坚持了好几个小时了。

【问题讨论】:

标签: php arrays key entities


【解决方案1】:

你这样做是错误的。试试 -

foreach($_POST as $key => $val){
    $_POST2[] = htmlentities([$val]);
}

不需要for 循环。 foreach 将包装所有值。如果您希望 keys 与 $_POST 相同,则将其留空。




2019 年 11 月 18 日更新


事实上,如果您正在处理关联数组,例如 _POST(与索引数组相反),其中您正在处理具有名称而不是数字的键,那么您必须编写如下代码:

// this is the classic orthodox syntax 
foreach($_POST as $key => $val){
  $_POST[$key] = htmlentities($val);
}

如果想像我的朋友在上面建议的那样省略$key,它会起作用,但你最终会得到一个组合数组,它同时关联和索引(使用双内存并大大减慢你的脚本)。更重要的是它不会改变关联部分,它会产生并追加被htmlentities修改过的索引数组。

// appends a indexed array
foreach($_POST as $key => $val){
  $_POST[] = htmlentities($val);
}

// The & in front of $val permits me to modify the value of $val
// inside foreach, without appending a indexed array:

foreach($_POST as &$val){
  $val = htmlentities($val);
}

如果您使用索引数组,您始终可以将$key 排除在外,但请注意它是htmlentities($val) 而不是htmlentities([$val])

【讨论】:

  • 而且你可能想直接发布数组本身,即使你正在做的是一个反模式,你应该在你的视图中做 htmlentities,你应该在你的数据库中有你的 xss 然后过滤它在视图中,因为您应该希望轻松更改数据的表示形式,例如在 2nd rel 中。你可以有一个 json 表示
  • 即使你正在做的是反模式 - 你能解释一下吗? @LucaBruzzone
  • 你不应该在输入上做一个 htmlentities,你的输入根据定义是不安全的,你的模型是否需要检查你是否有一个 sqli 和你的视图(或模板系统)需要执行 htmlentities 以过滤所有数据。 mysqlf我没表达清楚,你的解决方法不错,就是问题错了xD
  • 它没有使用任何MVC。到目前为止,OP 没有提及任何关于此的内容,也没有将其保存到数据库或显示在其他地方。
  • 我知道,但指出这一点仍然很好,这就是为什么我给了你赞成票,然后发表评论以清除 xD 即使它不使用 mvc 这实际上是一个不好的做法 XD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多