当前位置: 首页 > 图文教程 > 网络编程 > PHP > 用PHP中的 == 运算符进行字符串比较

PHP
利用客户端缓存对网站进行优化的原理分析
php生成随机数或者字符串的代码
php include,include_once,require,require_once
php 特殊字符处理函数
php让图片可以下载的代码
网友原创的PHP模板类代码
wiki-shan写的php在线加密的解密程序
php chr() ord()中文截取乱码问题解决方法
php+AJAX传送中文会导致乱码的问题的解决方法
php面向对象的方法重载两种版本比较
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
php递归列出所有文件和目录的代码
php获取某个目录大小的代码
php目录管理函数小结
Zend Guard一些常见问题解答
fleaphp下不确定的多条件查询的巧妙解决方法
PHP下10件你也许并不了解的事情
PHP常用函数小技巧
php5 pdo新改动加载注意事项
php5新改动之短标记启用方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 242 ::
收藏到网摘: n/a

最近在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程序员的通病),会产生一些问题,甚至导致安全漏洞。最后,还是那句说得很烦很烦的话,对外来数据进行严格检查和过滤。