过滤sanizite用户输入浮点数逗号/点问题

时间:2016-03-16 08:05:22

标签: php wordpress filtering

试图弄清楚如何以合理的方式在php中使用过滤器

//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。这可以通过过滤器来解决吗?

更新 在反馈(发布的答案)后,我仍然有同样的问题:

使用时

$_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)

2 个答案:

答案 0 :(得分: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)中,用点替换逗号,然后在filter_var上使用$amount_ecb - 而不是使用filter_input

答案 1 :(得分: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));