用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 处理图片的类实现代码
Oct 23 PHP
用php实现的下载css文件中的图片的代码
Feb 08 PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
php单例模式的简单实现方法
Jun 10 PHP
PHP大神的十大优良习惯
Sep 14 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
php微信公众号开发之音乐信息
Oct 20 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二维数组排序的函数分享
2014/01/17 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
javascript 全等号运算符使用说明
2010/05/31 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
浅谈jquery中使用canvas的问题
2016/10/10 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
Ionic3实现图片瀑布流布局
2017/08/09 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
vue router-link 默认a标签去除下划线的实现
2020/11/06 Javascript
python实现自动登录
2018/09/17 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
django实现类似触发器的功能
2019/11/15 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
泰国汽车、火车和轮渡票预订网站:Bus Online Ticket
2017/09/09 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
省级四好少年事迹材料
2014/01/25 职场文书
小学生家长评语集锦
2014/01/30 职场文书
元旦联欢会主持词
2014/03/26 职场文书
会展策划与管理专业求职信
2014/06/09 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
利用python做表格数据处理
2021/04/13 Python