用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数据库(1)
Oct 09 PHP
PHP 如何向 MySQL 发送数据
Oct 09 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
老版本PHP转义Json里的特殊字符的函数
Jun 08 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
Aug 17 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
PHP策略模式写法
Apr 01 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
php数组中删除元素的实现代码
2012/06/22 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
php实现读取超大文件的方法
2014/07/28 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
php简单截取字符串代码示例
2016/10/19 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
在JavaScript中typeof的用途介绍
2013/04/11 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
IE中的File域无法清空使用jQuery重设File域
2014/04/24 Javascript
Bootstrap被封装的弹层
2016/07/20 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python学习入门之区块链详解
2017/07/25 Python
python监控文件并且发送告警邮件
2018/06/21 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
python 读写文件包含多种编码格式的解决方式
2019/12/20 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
财务会计自荐信范文
2014/02/21 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
电力培训心得体会
2014/09/02 职场文书
政协会议宣传标语
2014/10/09 职场文书
2015年招聘工作总结
2014/12/12 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL
关于vue-router-link选择样式设置
2022/04/30 Vue.js