You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP中保留AJAX传递的带时区时间戳里的加号?

解决AJAX传递带时区时间戳时PHP端'+'号丢失的问题

问题原因

jQuery AJAX默认用application/x-www-form-urlencoded格式发送数据,HTTP协议里+会被解析成空格,导致PHP接收时+号变成空格,JSON解析失败。

解决办法

方法一:前端改用JSON格式发送(推荐)

直接把数据序列化为JSON字符串,设置请求头为application/json,绕开URL编码的问题:

$.ajax({
  url: 'your_api.php',
  method: 'POST',
  contentType: 'application/json',
  data: JSON.stringify({"timestamp":"2024-04-10 12:32:00+02"}),
  success: function(res) {
    // 处理返回结果
  }
});

PHP端从原始输入流读取数据,再解析JSON:

$rawData = file_get_contents('php://input');
$data = json_decode($rawData, true);
// 此时$data['timestamp']会完整保留带+号的时间戳

方法二:前端编码时间戳,后端解码

前端用encodeURIComponent对时间戳单独编码,把+转成合法的URL编码字符:

const timestamp = encodeURIComponent("2024-04-10 12:32:00+02");
$.ajax({
  url: 'your_api.php',
  method: 'POST',
  data: {"timestamp": timestamp},
  success: function(res) {
    // 处理返回结果
  }
});

PHP端用urldecode还原时间戳:

$timestamp = urldecode($_POST['timestamp']);
// 得到正确的2024-04-10 12:32:00+02

方法三:PHP端直接修复原始POST数据(仅限前端无法修改的场景)

如果没法改前端代码,PHP可以读取原始POST数据,把空格替换回+后再解析:

$rawPost = file_get_contents('php://input');
// 注意:如果数据里原本就有正常空格,这个方法会误替换,谨慎使用
$fixedPost = str_replace(' ', '+', $rawPost);
parse_str($fixedPost, $postData);
$data = json_decode($postData['data'], true);

内容的提问来源于stack exchange,提问作者erik-stengel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:02:42