使用==与strcmp进行string比较

似乎PHP的==运算符是区分大小写的? 那么有什么理由使用strcmp() ? 做这样的事是否安全?

 if ( $password == $password2 ) { ... } 

使用它的原因是因为strcmp

如果str1小于str2则返回<0; 如果str1大于str2则为0;如果相等则为0。

==只返回truefalse ,它不会告诉你哪个是“更大”的string。

你不应该使用==来进行string比较。 ===是的。

 $something = 0; echo ('password123' == $something) ? 'true' : 'false'; 

只要运行上面的代码,你会看到为什么。

 $something = 0; echo ('password123' === $something) ? 'true' : 'false'; 

现在,这个好一点。

不要在PHP中使用==。 它不会做你期望的。 即使您将string与string进行比较,PHP也会隐式地将它们转换为浮点数,并在出现数字时进行数字比较。

例如'1e3'=='1000'返回true。

好吧..根据这个PHP错误报告 ,你甚至可以得到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.'; } ?> 

它给你一个警告,但仍然绕过比较。
你应该这样做=== @postfuturistbuild议。

一定要记住,比较string时,应该使用===运算符(严格比较)而不是 ==运算符(宽松比较)。

使用==可能是危险的。

请注意,如果两者不同,它会将该variables转换为另一种数据types。

例子:

  • echo (1 == '1') ? 'true' : 'false';
  • echo (1 == true) ? 'true' : 'false';

正如你所看到的,这两个来自不同的types,但结果是true ,这可能不是你的代码所期望的。

但是,使用=== ,build议testing显示它比strcmp()及其不区分大小写的替代方法strcasecmp()快一点。

快速谷歌search这个速度比较: http : //snipplr.com/view/758/

strcmp()和“===”都区分大小写,但“===”要快得多

示例代码: http : //snipplr.com/view/758/

strcmp会根据它运行的环境(Linux / Windows)返回不同的值!

原因是它有一个错误报告说错误https://bugs.php.net/bug.php?id=53999

请小心处理!!谢谢。

总结所有答案:

  • ==是string比较的一个坏主意
    在许多情况下,它会给你“惊人的”结果。 不要相信它。

  • ===很好,会给你最好的performance。

  • 如果您需要确定哪个string是“更大”,通常用于sorting操作,则应使用strcmp()

此function可以帮助sorting。 要更清楚地分类。 如果string1在string2之前sorting,则strcmp()返回小于0;如果string2在string1之前sorting,strcmp()返回小于0;如果它们相同,则返回0。 例如

 $first_string = "aabo"; $second_string = "aaao"; echo $n = strcmp($first_string,$second_string); 

该函数将返回大于零,因为aaao正在sorting之前aabo。

如果您希望按照字典顺序排列/比较string,可以使用strcmp() 。 如果你只是想检查平等,那么==就好了。

使用strcmp进行string比较

 echo strcmp("my name","my name");