将所有POST变量转换为htmlspecialchars

时间:2015-10-04 21:50:02

标签: php post

在我的PHP应用程序中,我有很多地方可以获取POST数据并且必须将其转换为htmlspecialchars,因此我发现自己必须单独指定和转换$ _POST中的每个元素。这是一个例子:

$tusername=htmlspecialchars($_POST['username'], ENT_QUOTES,'UTF-8');
$tfname=htmlspecialchars($_POST['firstname'], ENT_QUOTES,'UTF-8');
$tlname=htmlspecialchars($_POST['lastname'], ENT_QUOTES,'UTF-8');
$temail=htmlspecialchars($_POST['email'], ENT_QUOTES,'UTF-8');
$tskill=htmlspecialchars($_POST['skillsearchpriv'], ENT_QUOTES,'UTF-8');

这可能会变得乏味,特别是当您有多个表单的+10 $ _POST变量时。

是否一次将所有POST变量转换为htmlspecialchars?

$_POST=htmlspecialchars($_POST[allkeys], ENT_QUOTES,'UTF-8');

之类的东西

4 个答案:

答案 0 :(得分:9)

一种方法是array_map(),它为您提供了一种将特定函数调用(称为callback)应用于数组的每个元素的方法。

 $newpost = array_map ( 'htmlspecialchars' , $_POST );

然后你可以得到$newpost['firstname']

答案 1 :(得分:3)

一个简单的foreach循环就足够了。

<?php

foreach ($_POST as $key => $value) {
    $_POST[$key] = htmlspecialchars($value, ENT_QUOTES,"UTF-8");
}

?>

阅读材料

Performance of foreach, array_map with lambda and array_map with static function

答案 2 :(得分:2)

  

类似$ _POST = htmlspecialchars($ _ POST [allkeys],ENT_QUOTES,'UTF-8');?

你不应该这样做。您还可以将帖子数据用于其他内容,并且您应该在html页面中使用htmlspecialchars 来表示转义数据。

你想要的是使用像twig这样的模板引擎,它默认启用自动转义。

答案 3 :(得分:2)

使用array_walk e.g。

function xss_protect(&$item) {
  $item = htmlspecialchars($item);
}
array_walk($_POST, 'xss_protect');