使用==与strcmp进行字符串比较

最后都变了- 提交于 2020-03-16 14:55:54

某厂面试归来,发现自己落伍了!>>>

似乎PHP的===运算符区分大小写? 那么有没有理由使用strcmp() ? 做以下事情是否安全:

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

#1楼

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

原因是它有bug,因为bug报告说https://bugs.php.net/bug.php?id=53999

请小心处理!!谢谢。


#2楼

不要在PHP中使用== 。 它不会做你期望的。 即使您将字符串与字符串进行比较,PHP也会隐式地将它们转换为浮点数,并在它们看起来是数字时进行数值比较。

例如'1e3' == '1000'返回true。 你应该使用===代替。


#3楼

嗯..根据这个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.';
    }
 ?>

它会给你一个警告,但仍会绕过比较。
你应该做===为@postfuturist建议。


#4楼

永远记住,在比较字符串时,你应该使用===运算符(严格比较)而不是 ==运算符(松散比较)。


#5楼

此功能也可以帮助排序。 要更清楚地排序。 如果string1在string2之前排序,则strcmp()返回小于0,如果string2在string1之前排序,则strcmp()返回大于0;如果string2相同,则返回0。 例如

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!