用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_MySQL教程-第一天
Mar 18 PHP
PHP学习之数组值的操作
Apr 17 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
初识PHP
Sep 28 PHP
php带抄送和密件抄送的邮件发送方法
Mar 20 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
centos 7.2下搭建LNMP环境教程
Nov 20 PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
PHP终止脚本运行三种实现方法详解
Sep 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
PHP防注入安全代码
2008/04/09 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
常用js脚本
2006/12/03 Javascript
jquery api参考 visualjquery 中国线路 速度快
2007/11/30 Javascript
js 表单验证方法(实用)
2009/04/28 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
基于jQuery实现多层次的手风琴效果附源码
2015/09/21 Javascript
利用jQuery实现滑动开关按钮效果(附demo源码下载)
2017/02/07 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
vue中实现滚动加载更多的示例
2017/11/08 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
Python的信号库Blinker用法详解
2020/12/31 Python
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
Tomcat的缺省是多少,怎么修改
2014/04/09 面试题
开办加工厂创业计划书
2014/01/03 职场文书
服务员自我评价
2014/01/25 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫