[php] ‘==’와 ‘strcmp ()’를 사용한 문자열 비교
PHP ===
연산자는 대소 문자를 구분 하는 것 같습니다 . 사용할 이유가 strcmp()
있습니까?
다음과 같은 일을하는 것이 안전합니까?
if ($password === $password2) { ... }
답변
그것을 사용하는 이유는 strcmp
str1이 str2보다 작 으면 <0을 리턴합니다. str1이 str2보다 크면 0이고, 같으면 0입니다.
===
true
또는 만 반환 false
하며 “더 큰”문자열을 알려주지 않습니다.
답변
==
문자열 비교에 사용해서는 안됩니다 . ===
괜찮습니다.
$something = 0;
echo ('password123' == $something) ? 'true' : 'false';
위의 코드를 실행하면 이유를 알 수 있습니다.
$something = 0;
echo ('password123' === $something) ? 'true' : 'false';
이제는 조금 나아졌습니다.
답변
==
PHP 에서는 사용하지 마십시오 . 그것은 당신이 기대하는 것을하지 않을 것입니다. 문자열을 문자열과 비교하더라도 PHP는 암시 적으로 부동 소수점으로 캐스트하고 숫자로 표시되면 숫자를 비교합니다.
예를 들어 '1e3' == '1000'
true 를 반환합니다. ===
대신 사용해야 합니다.
답변
이 PHP 버그 리포트에 따르면 0wn을 얻을 수도 있습니다.
<?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가 제안한대로
해야합니다 ===
.
답변
문자열을 비교할 때는 항상 ===
연산자가 아닌 ==
연산자 ( 엄격한 비교) 를 사용해야합니다 (느슨한 비교).
답변
모든 답변을 요약 :
-
==
문자열 비교 에는 나쁜 생각 입니다.
그것은 많은 경우에 “놀라운”결과를 줄 것입니다. 그것을 믿지 마십시오. -
===
괜찮아 최고의 성능을 제공합니다. -
strcmp()
일반적으로 정렬 작업에 “더 큰”문자열을 결정해야하는 경우 사용해야합니다.
답변
사용하면 ==
위험 할 수 있습니다.
변수가 다른 경우 변수를 다른 데이터 유형으로 캐스트합니다.
예 :
echo (1 == '1') ? 'true' : 'false';
echo (1 == true) ? 'true' : 'false';
보시다시피,이 두 가지 유형은 다르지만 결과는 true
입니다. 코드가 기대하지 않을 수도 있습니다.
사용 ===
하지만, 그것은 조금보다 더 빨리하다고 테스트 쇼로 추천 strcmp()
하고 대소 문자를 구별 대안 strcasecmp()
.
빠른 인터넷 검색으로이 속도 비교를합니다. http://snipplr.com/view/758/