用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的memory_limit限制的方法分享
Feb 21 PHP
php教程 插件机制在PHP中实现方案
Nov 02 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
PHP 线程安全与非线程安全版本的区别深入解析
Aug 06 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
Apr 24 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
php制作动态随机验证码
Feb 12 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
PHP基于openssl实现非对称加密代码实例
Jun 19 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数组的概述及分类与声明代码演示
2013/02/26 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
php文件上传类完整实例
2016/05/14 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
JS面向对象编程之对象使用分析
2010/08/19 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
JS简单计算器实例
2015/01/20 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
node.js实现博客小爬虫的实例代码
2016/10/08 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
原生js实现购物车功能
2020/09/23 Javascript
Python ldap实现登录实例代码
2016/09/30 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
python简单验证码识别的实现方法
2019/05/10 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
Python内置异常类型全面汇总
2020/05/28 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
财务管理个人自荐书范文
2013/11/24 职场文书
网络研修随笔感言
2014/02/17 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
借款协议书
2014/04/12 职场文书
企业标语口号
2014/06/10 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
2014党员干部四风问题对照检查材料思想汇报
2014/09/24 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers