PHP输出英文时间日期的安全方法(RFC 1123格式)


Posted in PHP onJune 13, 2014

最近项目中要为一个rest服务写客户端,其中的签名校验需要在HTTP Header中生成一个RFC 1123格式的Date。

这个问题比较好解决,简单翻阅了PHP文档,使用gmstrftime这个函数就能解决。

string gmstrftime ( string $format [, int $timestamp = time() ] )

调用的代码如下:
echo gmstrftime("%a, %d %b %Y %T %Z",time());
//输出:Tue, 01 Apr 2014 16:16:07 GMT

调试过程中发现,在另外一台电脑上,输出并不像预期中的结果,然后产生了中文:
二, 01  4 2014 16:20:02 GMT

继续翻阅文档,发现文档的注释中有说明,这个函数的结果受setlocale结果的影响,既收当前系统默认的语言的影响。使用下面的命令可以查看当前系统已安装的语言:
locale -a

那么根据刚刚分析的结果,将setlocale强制指定为英语就没问题了,代码如下:
setlocale(LC_TIME, 'en_US');
echo gmstrftime("%a, %d %b %Y %T %Z",time());

至此文章应该已经结束了,不过可惜的是测试用的Ubuntu机器上,因为是Live CD版,恰好没有en_US这个语言,但是有一个en_US.UTF-8。这个时候心理打鼓,这种做法似乎不太安全,我没办法确定运行代码的客户机上,到底有en_US还是有en_US.UTF-8。还好看到文档里的一段comments,可以用gmdate来代替,该函数不受setlocale结果的影响:
gmdate('D, d M Y H:i:s') . ' GMT';

Case closed~需求虽小,要写好并不容易,以后还要多加努力。
PHP 相关文章推荐
php代码优化及php相关问题总结
Oct 09 PHP
PHP学习 运算符与运算符优先级
Jun 15 PHP
PHP注释实例技巧
Oct 03 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
Yii快速入门经典教程
Dec 28 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 PHP
Apache无法自动跳转却显示目录的解决方法
Nov 30 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
PHP中phar包的使用教程
Jun 14 PHP
设定php简写功能的方法
Nov 28 PHP
Yii框架 session 数据库存储操作方法示例
Nov 18 PHP
PHP中多维数组的foreach遍历示例
Jun 13 #PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 #PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 #PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 #PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
Jun 12 #PHP
CodeIgniter框架过滤HTML危险代码
Jun 12 #PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 #PHP
You might like
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
深入php内核之php in array
2015/11/10 PHP
js中几种去掉字串左右空格的方法
2006/12/25 Javascript
jquery 获取json数据实现代码
2009/04/27 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
javascript中this指向详解
2016/04/23 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
2017/03/23 jQuery
微信小程序 地图map实例详解
2017/06/07 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
Python import自定义模块方法
2015/02/12 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
完美解决安装完tensorflow后pip无法使用的问题
2018/06/11 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
python递归法实现简易连连看小游戏
2020/03/25 Python
Python用SSH连接到网络设备
2021/02/18 Python
社会实践心得体会
2014/01/03 职场文书
承认错误的检讨书
2014/01/30 职场文书
给孩子的新年寄语
2014/04/08 职场文书
工作时间调整通知
2015/04/24 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
Vue的生命周期一起来看看
2022/02/24 Vue.js
MySQL数据库 任意ip连接方法
2022/05/20 MySQL