PHP的===运算符似乎区分大小写?那么有什么理由可以使用strcmp()吗?做以下事情是否安全:
if ( $password === $password2 ) { ... }
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 319
使用它的原因是因为 strcmp
如果str1小于str2,则返回<0; 如果str1大于str2则> 0,如果它们相等则为0.
===只返回true或者false,它不会告诉你哪个是"更大"的字符串.
pos*_*ist 216
你永远不应该==用于字符串比较.===没关系
$something = 0;
echo ('password123' == $something) ? 'true' : 'false';
Run Code Online (Sandbox Code Playgroud)
只需运行上面的代码,你就会明白为什么.
$something = 0;
echo ('password123' === $something) ? 'true' : 'false';
Run Code Online (Sandbox Code Playgroud)
现在,这好一点.
Ant*_*ony 97
不要==在PHP中使用.它不会做你期望的.即使您将字符串与字符串进行比较,PHP也会隐式地将它们转换为浮点数,并在它们看起来是数字时进行数值比较.
例如,'1e3' == '1000'返回true.你应该使用===.
Aji*_*ith 43
嗯..根据这个php bug报告,你甚至可以得到0wned.
<?php
$pass = isset($_GET['pass']) ? $_GET['pass'] : '';
// Query /?pass[]= will authorize user
//strcmp and strcasecmp both are prone to this hack
if ( strcasecmp( $pass, '123456' ) == 0 ){
echo 'You successfully logged in.';
}
?>
Run Code Online (Sandbox Code Playgroud)
它会给你一个警告,但仍会绕过比较.
你应该===像@postfuturist建议的那样做.
Bal*_*our 22
总结所有答案:
==字符串比较是一个坏主意.
在许多情况下,它会给你"惊人"的结果.不要相信它.
=== 很好,会给你最好的表现.
strcmp() 如果您需要确定哪个字符串"更大",则应该使用它,通常用于排序操作.
Nik*_*ski 20
使用==可能很危险.
注意,如果两者不同,它会将变量转换为另一种数据类型.
例子:
echo (1 == '1') ? 'true' : 'false';echo (1 == true) ? 'true' : 'false';如您所见,这两个来自不同类型,但结果是true,这可能不是您的代码所期望的.
===但是,建议使用,因为测试表明它比strcmp()它不敏感的替代方案快一点strcasecmp().
快速谷歌搜索大喊这个速度比较:http://snipplr.com/view/758/
strcmp将根据它运行的环境返回不同的值(Linux/Windows)!
原因是它有bug,因为bug报告说 https://bugs.php.net/bug.php?id=53999
请小心处理!!谢谢.