【问题标题】:filter sanizite user input float numbers comma/dot issue过滤清理用户输入浮点数逗号/点问题
【发布时间】:2016-07-01 23:50:00
【问题描述】:

试图弄清楚如何以合理的方式在 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)

【问题讨论】:

  • 为了安全起见,只需将 , 替换为 .;如果用户插入将被替换;休息一下;
  • 但是在这种情况下我将如何进行替换呢? filter_input 函数不直接使用 $_POST ,因此无法执行 $amount = str_replace(',','.',$_POST['amount_ecb'];
  • 你在使用codeigniter吗?
  • 不使用 Wordpress

标签: php wordpress filtering


【解决方案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

【讨论】:

    【解决方案2】:
    /* 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));
    

    【讨论】:

    • 理论上这看起来很棒,但恐怕它不起作用。发布的数组当然会用点替换逗号,但 filter_input 函数似乎没有直接访问 $_POST。
    • 我已经解决了 :-) 感谢您指引我正确的方向!
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2021-05-28
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多