用PHP中的 == 运算符进行字符串比较

2015-01-24信息快讯网
最近在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 表单数据的获取代码
php URL编码解码函数代码
php 进度条实现代码
php 表单验证实现代码
PHP 截取字符串 分别适合GB2312和UTF8编码情况
php IP及IP段进行访问限制的代码
中英文字符串翻转函数
php在字符串中查找另一个字符串
一些使用频率比较高的php函数
PHP在字符串中查找指定字符串并删除的代码
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
php面向对象的方法重载两种版本比较
php生成随机数或者字符串的代码
利用客户端缓存对网站进行优化的原理分析第1/2页
php数组应用之比较两个时间的相减排序
说明的比较细的php 正则学习实例
php array_merge下进行数组合并的代码
用PHP与XML联手进行网站编程代码实例
php文本操作方法集合比较第1/2页
PHP中for循环语句的几种变型
PHP图片上传类带图片显示
整合了前面的PHP数据库连接类~~做成一个分页类!
PHP面向对象的使用教程 简单数据库连接
PHP生成静态页
php缓存技术介绍
如何使用PHP中的字符串函数
一个可以删除字符串中HTML标记的PHP函数
如何在PHP中进行身份认证
PHP中一个控制字符串输出的函数
几种显示数据的方法的比较
使用字符串函数输出整数化的PHP版本号
在字符串中把网址改成超级链接
php的header和asp中的redirect比较
如何对PHP程序中的常见漏洞进行攻击(下)
如何对PHP程序中的常见漏洞进行攻击(上)
用PHP连mysql和oracle数据库性能比较
利用js调用后台php进行数据处理原码
如何对PHP程序中的常见漏洞进行攻击
©2014-2024 dbsqp.com