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