【问题标题】:Sanitizing a Date消毒日期
【发布时间】:2014-04-13 04:45:18
【问题描述】:

我正在使用允许用户选择日期的 javascript 日期选择器。但是,我还想在进入数据库之前对发布的日期数据进行清理。我在这里没有看到任何净化过滤器:http://us2.php.net/manual/en/filter.filters.sanitize.php

在输入数据库之前清理日期的最佳方法是什么?

这将是帖子的原始值:

$datepick = $_POST['date'];
// wich is 04/12/2014

然后我将它转换为数据库:

$date = date("Y-m-d", strtotime($datepick));

谢谢!

【问题讨论】:

  • 日期选择器使用什么日期格式?另外,您的数据库需要什么格式?
  • @SverriM.Olsen 您好,我只是更新帖子以反映您的问题。

标签: php sanitization input-sanitization


【解决方案1】:

如果您的日期类似于“03/02/2014”,那么您可以简单地通过正则表达式清理您的变量:

$date = preg_replace("([^0-9/])", "", $_POST['date']);

这仅允许数字 (0-9) 和正斜杠 (/)。

【讨论】:

  • 您好,我刚刚更新了帖子以显示我目前对日期和值所做的事情。
  • 我认为这可以很好地满足我的需求。我会测试一下。谢谢
  • @MagentoMan 我刚刚根据您的更改通过答案进行了更新。如果有效 - 将其标记为解决方案。谢谢。
  • 谢谢!我正要请您将您的帖子更新为该答案,以便我可以:)
【解决方案2】:

格式化日期可以清理它,因为:

  1. 如果格式化成功,那么它将只是一个日期,其语法由格式字符串控制。
  2. 如果失败,则返回 FALSE。

这是真的:

DateTime::format
DateTimeImmutable::format
DateTimeInterface::format
date_format()
Date($format, $date_string)

【讨论】:

    【解决方案3】:

    此表达式可用于支持 12/12/2016 和 12-12-1993 格式。

    filter_var (preg_replace("([^0-9/] | [^0-9-])","",htmlentities($input)));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-28
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多