Programing

==와 strcmp를 사용한 문자열 비교

lottogame 2020. 3. 8. 09:53
반응형

==와 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가 제안한대로
해야합니다 ===.


문자열을 비교할 때는 항상 ===연산자가 아닌 == 연산자 ( 엄격한 비교) 를 사용해야합니다 (느슨한 비교).


사용하면 ==위험 할 수 있습니다.

변수가 다른 경우 변수를 다른 데이터 유형으로 캐스트합니다.

예 :

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

보시다시피,이 두 가지 유형은 다르지만 결과는 true입니다. 코드가 기대하지 않을 수도 있습니다.

사용 ===하지만, 그것은 조금보다 더 빨리하다고 테스트 쇼로 추천 strcmp()하고 대소 문자를 구별 대안 strcasecmp().

빠른 인터넷 검색으로이 속도 비교를합니다. http://snipplr.com/view/758/


모든 답변을 요약 :

  • ==문자열 비교 에는 나쁜 생각 입니다.
    그것은 많은 경우에 "놀라운"결과를 줄 것입니다. 그것을 믿지 마십시오.

  • === 괜찮아 최고의 성능을 제공합니다.

  • strcmp() 일반적으로 정렬 작업에 "더 큰"문자열을 결정해야하는 경우 사용해야합니다.


strcmp()그리고 ===민감한 대소하지만 ===훨씬 빠릅니다

샘플 코드 : http://snipplr.com/view/758/


strcmp는 실행중인 환경 (Linux / Windows)에 따라 다른 값을 반환합니다!

그 이유는 버그 보고서에 https://bugs.php.net/bug.php?id=53999 라는 버그가 있기 때문입니다.

조심해서 다루십시오 !! 감사합니다.


사전 식으로strcmp() 문자열을 주문 / 비교하려는 경우 사용할 수 있습니다 . 평등을 확인하고 싶다면 괜찮습니다.==


또한이 기능은 정렬에 도움이 될 수 있습니다. 정렬에 대해 더 명확하게하기 위해. strcmp ()는 string1이 string2보다 먼저 정렬되면 0보다 작고 string2가 string1보다 먼저 정렬되면 0보다 크거나 같으면 0보다 큰 값을 반환합니다. 예를 들어

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

aaao가 aabo 전에 정렬되므로 함수는 0보다 큰 값을 반환합니다.


PHP 알파벳순 정렬 대신 문자의 ASCII 값을 사용하여 비교하십시오. 소문자는 대문자보다 ASCII 값이 높습니다 . 이러한 종류의 비교를하려면 identity 연산자 === 를 사용하는 것이 좋습니다 . strcmp () 는 이진 안전 문자열 비교를 수행하는 함수입니다. str1이 str2보다 작 으면 두 개의 문자열을 인수로 사용하고 <0을 리턴합니다. str1이 str2보다 크면 0이고, 같으면 0입니다. 거기에 또한 대소 문자를 구별하지 버전 이름 strcasecmp () 첫번째 변환 문자열을 소문자로 그게 한 다음를 비교합니다.

참고 URL : https://stackoverflow.com/questions/3333353/string-comparison-using-vs-strcmp



반응형