PHPで文字列を比較する場合、「==」演算子は最初に文字列を数値
[1] [2]に変換しようとするため(
両方のオペランドが文字列であっても)、予期しない結果になることがあります。
<?php
var_dump('123' == ' 123');
var_dump('1e3' == '1000');
var_dump('+74951112233' == '74951112233');
var_dump('00000020' == '0000000000000000020');
var_dump('0X1D' == '29E0');
var_dump('0xafebac' == '11529132');
var_dump('0xafebac' == '0XAFEBAC');
var_dump('0xeb' == '+235e-0');
var_dump('0.235' == '+.235');
var_dump('0.2e-10' == '2.0E-11');
var_dump('61529519452809720693702583126814' == '61529519452809720000000000000000');
. ,
in_array:
<?php
$_GET['fileId'] = '0X1D';
$privateFileIds = array('29E0');
if (in_array(@$_GET['fileId'], $privateFileIds))
{
print 'Access deny';
exit;
}
:
(string) $aaa === (string) $bbb;
strcmp($aaa, $bbb) === 0;
in_array((string) $aaa, $array, true);
.UPD: v0s , "strcmp" "==" ( "===").