用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 相关文章推荐
真正的ZIP文件操作类(php)
Jul 21 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
PHP在不同页面间传递Json数据示例代码
Jun 08 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
php微信开发之上传临时素材
Jun 24 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
PHP执行linux命令6个函数代码实例
Nov 24 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
理解PHP5中static和const关键字的区别
2007/03/19 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
php调用c接口无错版介绍
2014/03/11 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
Aster vs KG BO3 第一场2.19
2021/03/10 DOTA
简单几行JS Code实现IE邮件转发新浪微博
2013/07/03 Javascript
js函数调用的方式
2014/05/06 Javascript
JavaScript实现在页面间传值的方法
2015/04/07 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
浅谈Node异步编程的机制
2017/10/18 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
python中pass语句用法实例分析
2015/04/30 Python
python os用法总结
2018/06/08 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
使用Python下载抖音各大V视频的思路详解
2021/02/06 Python
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
社区庆中秋节活动方案
2014/02/07 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang