用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 相关文章推荐
层叠菜单的动态生成
Oct 09 PHP
AJAX for PHP简单表数据查询实例
Jan 02 PHP
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 PHP
php读取二进制流(C语言结构体struct数据文件)的深入解析
Jun 13 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 PHP
php bootstrap实现简单登录
Mar 08 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
PHP实现多关键字加亮功能
Oct 21 PHP
Thinkphp事务操作实例(推荐)
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
smarty中post用法实例
2014/11/28 PHP
php中curl使用指南
2015/02/05 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
Node.js与MySQL交互操作及其注意事项
2016/10/05 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
vuejs移动端实现div拖拽移动
2019/07/25 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
举例讲解Python中装饰器的用法
2015/04/27 Python
Python实现句子翻译功能
2017/11/14 Python
python with语句的原理与用法详解
2020/03/30 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
css3实现超立体3D图片侧翻倾斜效果
2014/04/16 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
猫咪家具:CatsPlay
2018/11/03 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
毕业自荐书
2013/12/09 职场文书
家长会主持词
2014/03/26 职场文书
周一问候语大全
2015/11/10 职场文书
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电