用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 表单验证实现代码
Mar 10 PHP
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
Nov 01 PHP
PHP几个数学计算的内部函数学习整理
Aug 06 PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 PHP
PHP产生不重复随机数的5个方法总结
Nov 12 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
php实现的RSS生成类实例
Apr 23 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 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
重量级动漫纷纷停播!唯独OVERLORD第四季正在英魂之刃继续更新
2020/05/06 日漫
用libTemplate实现静态网页的生成
2006/10/09 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
可以将word转成html的js代码
2010/04/11 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
Node.js API详解之 Error模块用法实例分析
2020/05/14 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
python 如何快速复制序列
2020/09/07 Python
90后毕业生的求职信范文
2013/09/21 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
资产移交协议书
2016/03/24 职场文书
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS