用PHP中的 == 运算符进行字符串比较


Posted in PHP onNovember 26, 2006

最近在Greg Beaver's的blog上发表的一篇新文章 comparing strings in PHP with the == operator 中提及了PHP的 == 运算符在对字符串进行比较时值得注意的问题。

在某些情况下,PHP会把类数值数据(如含有数字的字符串等)转换成数值处理,== 运算符就是其中之一。在使用 == 运算符对两个字符串进行松散比较时,PHP会把类数值的字符串转换为数值进行比较,下面的实验证实了这个结论:

<?php
var_dump
('01' == 1);
?>

以上代码输出结果为:
bool(true)

所以,在使用对字符串进行比较时,建议使用 === 运算符对字符串进行严格的检查,或使用strcmp()等函数,从而避免可能产生的问题。PHP手册中的《PHP 类型比较表》对此也有详细说明。

除此之外,常用的in_array()函数也存在弱类型的问题,见如下代码:

<?php
var_dump
(in_array('01', array('1')));
?>

以上代码输出结果为:
bool(true)

相信用过该函数进行安全性检查的PHP编程人员都知道这会产生怎么样的安全问题了吧?幸好in_array()函数为我们提供了第三个参数,把它设为 true 就可以打开in_array()函数的强制类型检查机制,如下代码所示:

<?php
var_dump
(in_array('01', array('1'), true));
?>

输出结果为:
bool(false)

由于PHP是一种弱类型的语言,也就是说数据类型这个概念在PHP中被弱化。因而如果在编程时过分忽略数据类型(也是大部份PHP程序员的通病),会产生一些问题,甚至导致安全漏洞。最后,还是那句说得很烦很烦的话,对外来数据进行严格检查和过滤。

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(4)
Oct 09 PHP
杏林同学录(八)
Oct 09 PHP
php.ini 中文版
Oct 28 PHP
php 静态变量与自定义常量的使用方法
Jan 26 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
详解php设置session(过期、失效、有效期)
Nov 12 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
php中get_magic_quotes_gpc()函数说明
Feb 06 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
php 使用mpdf实现指定字段配置字体样式的方法
Jul 29 PHP
PHP图片上传类带图片显示
Nov 25 #PHP
整合了前面的PHP数据库连接类~~做成一个分页类!
Nov 25 #PHP
PHP面向对象的使用教程 简单数据库连接
Nov 25 #PHP
xajax写的留言本
Nov 25 #PHP
SSI指令
Nov 25 #PHP
配置支持SSI
Nov 25 #PHP
PHP生成静态页
Nov 25 #PHP
You might like
php.ini中文版
2006/10/09 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
微信access_token的获取开发示例
2015/04/16 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
2019/08/27 PHP
php实现记事本案例
2020/10/20 PHP
js 数值项目的格式化函数代码
2010/05/14 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
js实现网站最上边可关闭的浮动广告条代码
2015/09/04 Javascript
深入理解bootstrap框架之第二章整体架构
2016/10/09 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
[01:00:59]VP VS VG Supermajor小组赛胜者组第二轮 BO3第二场 6.2
2018/06/03 DOTA
python中 logging的使用详解
2017/10/25 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
2018/10/21 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
为什么python比较流行
2020/06/19 Python
Python基于locals返回作用域字典
2020/10/17 Python
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
遇到的Mysql的面试题
2014/06/29 面试题
高等教育学自荐书范文
2014/02/10 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
2015个人简历自我评价语
2015/03/11 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书