【问题标题】:Convert all POST variables to htmlspecialchars将所有 POST 变量转换为 htmlspecialchars
【发布时间】:2016-01-01 12:43:36
【问题描述】:

在我的 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');?

【问题讨论】:

  • 您是否发现这些答案有帮助?您既没有接受其中任何一个,也没有发表任何评论作为反馈。

标签: php post


【解决方案1】:

一个简单的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

【讨论】:

  • 翻阅“阅读材料”,我觉得性能差异可能来自xdebug 本身。你没注意到吗?
  • @IfediOkonkwo 这更像是一般性的阅读,因为我发现它很有趣并且与问题有些相关。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

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

    你想要的是使用一些模板引擎,比如twig,默认启用自动转义。

    【讨论】:

      【解决方案4】:

      使用array_walk 例如

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        • 2020-11-04
        • 2020-12-05
        • 1970-01-01
        • 2014-10-17
        相关资源
        最近更新 更多