2015-10-04 60 views
1

在我的PHP應用程序中,我有很多地方獲取POST數據並必須將其轉換爲htmlspecialchars,因此我發現自己必須單獨指定和轉換$ _POST中的每個元素。這裏有一個例子:將所有POST變量轉換爲htmlspecialchars

$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

您是否發現以上答案有幫助?你既沒有接受任何一個,也沒有作爲反饋發表評論。 –

回答

8

一去的辦法是array_map(),它提供你施加特定的函數調用(稱爲callback)到的各要素的手段陣列。

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

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

+0

不錯,謝謝! – dlofrodloh

2

一個簡單的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

+0

翻閱「閱讀材料」,我覺得性能差異可能來自'xdebug'本身。你沒注意到嗎? –

+0

@IfediOkonkwo它更像是一般性閱讀,因爲我覺得它很有趣,它與問題有一定關係。 – Script47

1

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

你不應該這樣做。您也可以將發佈數據用於其他事情,並且您應該使用htmlspecialchars只有用於在您的html頁面中轉義數據。

你想要的是使用一些模板引擎,如twig,默認啓用自動轉義。

2

使用array_walk 例如,

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