2016-03-16 64 views
4

試圖找出在PHP中如何將用戶過濾器以合理的方式過濾sanizite用戶輸入浮點數逗號/點問題

//Do sanization of user input 
//$_POST['amount_ecb'] can be 77,7 or 77.7 

$amount = filter_input(INPUT_POST, 'amount_ecb', 
FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 

如果公佈值是77.7它正確地設置量,但如果用戶將號碼與逗號而不是點(例如77,7)$amount返回77

我希望它在兩種情況下都返回77.7。這是可能的解決與過濾器?

UPDATE 反饋(公佈答案)我仍然有同樣的問題後:

當使用

$_POST['amount_ecb'] = str_replace(',', '.', $_POST['amount_ecb']); 

這一點,有人則返回

$ _POST對象

array (size=5) 
    'amount_ecb' => string '77.7' (length=4) 
    'from_ecb' => string 'GBP' (length=3) 
    'to_ecb' => string 'SEK' (length=3) 
    'submit' => string 'Calculate currency' (length=18) 
    'result_decimals' => string '4' (length=1) 

$量

string '777' (length=3) 
+0

爲了安全起見,只需要更換。如果插入的用戶將被替換;休息你已經完成了; – itzmukeshy7

+0

但是如何在這種情況下做替換呢? filter_input函數不直接使用$ _POST,這使得它不可能做類似$ amount = str_replace(',','。',$ _ POST ['amount_ecb']; – bestprogrammerintheworld

+0

您是否使用codeigniter? – itzmukeshy7

回答

0
/* find , and replace with . if any; */ 
$_GET['search'] = str_replace(',', '.', $_GET['search']); 

/* finally filter data */ 
$amount = filter_var($_GET['search'], FILTER_SANITIZE_NUMBER_FLOAT, array(
    'flags'=>FILTER_FLAG_ALLOW_FRACTION)); 
+0

這在理論上看起來不錯,但是它不起作用,發佈的數組當然會用點替換逗號,但filter_input函數似乎並不直接訪問$ _POST。 – bestprogrammerintheworld

+0

嘗試更新代碼; – itzmukeshy7

+0

已經解決了它:-)謝謝你把我放在正確的方向! – bestprogrammerintheworld

1

終於找到了如何可以得到解決!(即使我認爲這應該建立在input_filter莫名其妙)。

如果有人絆倒在同樣的問題...

$amount_ecb = str_replace(',', '.', $_POST['amount_ecb']); 
$amount = filter_var($amount_ecb, 
FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION); 

我把貼值到另一個變量($amount_ecb),被替換成句號逗號,然後$amount_ecb使用filter_var - 而不是使用filter_input在所有。