Czy == w PHP jest porównaniem ciągów uwzględniających wielkość liter?


88

Nie mogłem znaleźć tego na php.net. Czy podwójny znak równości ( ==) ma znaczenie przy porównywaniu ciągów znaków w PHP?

Odpowiedzi:



20

Tak, ale porównuje bajt po bajcie.

Jeśli porównujesz ciągi znaków Unicode, możesz najpierw chcieć je znormalizować. Zobacz Normalizerklasę.

Przykład (wyjście w UTF-8):

$s1 = mb_convert_encoding("\x00\xe9", "UTF-8", "UTF-16BE");
$s2 = mb_convert_encoding("\x00\x65\x03\x01", "UTF-8", "UTF-16BE");
//look the same:
echo $s1, "\n";
echo $s2, "\n";
var_dump($s1 == $s2); //false
var_dump(Normalizer::normalize($s1) == Normalizer::normalize($s2)); //true

3
+1 dla zrozumienia, że ​​nie jest to tak naprawdę porównanie ciągów (to porównanie binarne). W związku z tym technicznie nie rozróżnia wielkości liter (chociaż w 99,999% przypadków zachowuje się tak samo) ...
ircmaxell

11

Tak, ==rozróżnia się wielkość liter.

Nawiasem mówiąc, aby porównać bez rozróżniania wielkości liter, użyj strcasecmp:

<?php
    $var1 = "Hello";
    $var2 = "hello";
    echo (strcasecmp($var1, $var2) == 0); // TRUE;
?>



1

Tak, ==rozróżnia się wielkość liter. Najłatwiejszym sposobem jest dla mnie konwersja na wielkie litery, a następnie porównanie. Na przykład:

$var = "Hello";
if(strtoupper($var) == "HELLO") {
    echo "identical";
}
else {
    echo "non identical";
}

Mam nadzieję, że to zadziała!


0

Zamiast tego możesz spróbować porównać z funkcją skrótu

  if( md5('string1') == md5('string2') ) {
    // strings are equal
  }else {
    // strings are not equal
  }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.