【发布时间】:2014-12-12 20:22:21
【问题描述】:
我有一个符合 ISO 8601 的日期/时间字符串 2014-12-11T23:43:44+00:00,我通过 HTTP 将它传递到 Web 服务器。在那里,我从我的 HTTP POST 字段中提取数据,一切都很好,当我 print_r 我的参数时,值返回为2014-12-11T23:43:44 00:00。
但我注意到,+ 现在不见了,(我猜这是在数据的呈现中,而不是数据被编码为什么,不是(?)问题,对吧?)
然后,在将值解析为参数以创建新的 DateTime 对象时,我收到以下错误:
DateTime::__construct(): Failed to parse time string (2014-12-11T23:43:44 00:00) at position 20 (0): Double time specification
我猜这是因为它将附加的00:00 视为23:43:44 之后的另一个时间,当然这是时差。
这是因为+ 丢失还是我做错了什么?
我还应该指出,我的原始值 (2014-12-11T23:43:44+00:00) 来自 http://www.timestampgenerator.com 的 ISO 8601 字段。
编辑:
这是我用来从 PHP 中的 POST 请求中获取字符串的代码:
static function request_parameters($including_request_uri = false)
{
$request_parameters = $_REQUEST;
if (!$including_request_uri)
{
unset($request_parameters[PARAMETER_NAME_REQUEST]);
}
return $request_parameters;
}
然后我像这样检索值:
$parameters = RESTController::request_parameters();
$date_created = $parameters[UNIVERSALLY_UNIQUE_OBJECT_KEY_DATE_CREATED];
【问题讨论】:
-
你确定是 POST 吗?
+是在 URL 中表示空格的一种形式,所以如果我们谈论 GET,这将很容易解释。 -
意料之中。 URL 中的
+是一个编码的空格字符。您的日期字符串正在某个地方通过 url_decode() 运行,并且+被解码为一个空格。如果您想通过查询字符串传递+,它将被编码为%2B -
试试 $date = preg_replace("/ /","+",$date);
-
查看编辑了解我如何获取 POST 数据。没有
url_decode()正在发送 -
我知道这听起来很傻,但请确保您修剪字符串以删除任何空白字符。这是一个猜测,因为网站上的数据看起来不错。