用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 09 PHP
ADODB类使用
Nov 25 PHP
php学习之流程控制实现代码
Jun 09 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
php htmlentities()函数的定义和用法
May 13 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
PHP基于自增数据如何生成不重复的随机数示例
May 19 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
Git命令之分支详解
Mar 02 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
我的论坛源代码(八)
2006/10/09 PHP
php array_intersect()函数使用代码
2009/01/14 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
Laravel框架实现的批量删除功能示例
2019/01/16 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
js密码强度检测
2016/01/07 Javascript
Vue.js每天必学之过渡与动画
2016/09/06 Javascript
React快速入门教程
2017/01/17 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
jquery版轮播图效果和extend扩展
2017/07/18 jQuery
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
python正则表达式的懒惰匹配和贪婪匹配说明
2020/07/13 Python
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
应届生.NET方向面试题
2015/05/23 面试题
大一学生假期实习的自我评价
2013/10/12 职场文书
外贸采购员求职的自我评价
2013/11/26 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
科长竞聘演讲稿
2014/05/16 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
Redis实现分布式锁的五种方法详解
2022/06/14 Redis