用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中实现汉字转区位码应用源码实例解析
Jun 14 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
php 调试利器debug_print_backtrace()
Jul 23 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
php生成静态页面的简单示例
Apr 17 PHP
Yii实现多数据库主从读写分离的方法
Dec 29 PHP
javascript数组与php数组的地址传递及值传递用法实例
Jan 22 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 PHP
Symfony2创建页面实例详解
Mar 18 PHP
php 如何设置一个严格控制过期时间的session
May 05 PHP
ThinkPHP5.1验证码功能实现的示例代码
Jun 08 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 - Html Transfer Code
2006/10/09 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
2017/11/03 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
jQuery+ajax实现用户登录验证
2020/09/13 jQuery
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
python3+PyQt5重新实现自定义数据拖放处理
2018/04/19 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
Python numpy数组转置与轴变换
2019/11/15 Python
Python替换NumPy数组中大于某个值的所有元素实例
2020/06/08 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
工程建设实施方案
2014/03/14 职场文书
个人课题方案
2014/05/08 职场文书
优秀教师先进个人事迹材料
2014/08/31 职场文书
暑期学习心得体会
2014/09/02 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
用Python实现Newton插值法
2021/04/17 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏