时间:2021-05-18
最近在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程序员的通病),会产生一些问题,甚至导致安全漏洞。最后,还是那句说得很烦很烦的话,对外来数据进行严格检查和过滤。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
PHP运算符下面我分别看一下PHP3的算术、字符串、逻辑与比较等运算符。 1、算术运算符 +: $a+$b加$a加上$b -: $a-$b减$a减去$
JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等。这些运算符都有一些属于自己的运算规
对于使用awk命令的用户来说,处理一行文本中的数字或者字符串时,使用比较运算符来过滤文本和字符串是十分方便的。下面的部分我们介绍"awk"的比较运算符。awk中
比较运算符用来对两个表达式的值进行比较(可以是数值的比较,也可以是字符串的比较)。具体的比较运算符如下表所示:名称运算符表达式相等=x=y不相等xy大于>x
1.数字运算支持+,-,*,/,^。这些运算符的操作数都是实数。2.连接运算连接两个字符串,用”..”运算符。如果操作数为数字,Lua将数字转换成字符串。3.赋