用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下通过POST还是GET来传值
Jun 05 PHP
PHP 文件缓存的性能测试
Apr 25 PHP
php中json_decode()和json_encode()的使用方法
Jun 04 PHP
PHP代码审核的详细介绍
Jun 13 PHP
php广告加载类用法实例
Sep 23 PHP
php+mysql数据库实现无限分类的方法
Dec 12 PHP
php遍历树的常用方法汇总
Jun 18 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
PHP使用Redis实现防止大并发下二次写入的方法
Oct 09 PHP
Laravel 实现密码重置功能
Feb 23 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 PHP
laravel配置Redis多个库的实现方法
Apr 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
php 全文搜索和替换的实现代码
2008/07/29 PHP
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
索趣科技的答案
2007/02/07 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
Python内置数据类型详解
2014/08/18 Python
Python装饰器基础详解
2016/03/09 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
美国著名的团购网站:Woot
2016/08/02 全球购物
后勤工作职责
2013/12/22 职场文书
英语自我评价范文
2014/01/24 职场文书
九年级语文教学反思
2014/02/04 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
五年级学生评语
2014/04/22 职场文书
初中学校对照检查材料
2014/08/19 职场文书
店铺转让协议书
2014/12/02 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers