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?

Michał Mrozek
źródło

Odpowiedzi:

104

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

Możesz użyć strcasecmpdo porównania bez rozróżniania wielkości liter

Colin Pickard
źródło
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
Artefacto
źródło
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;
?>
Stephen
źródło
8

== rozróżnia wielkość liter, tak.

Aby porównać ciągi bez wrażliwości, możesz użyć albo strtolower($x) == strtolower($y)lubstrcasecmp($x, $y) == 0

Frxstrem
źródło
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!

Salvi Pascual
źródło
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
  }
Witryna Antipas
źródło