Является ли == в PHP сравнением строк с учетом регистра?

88

Мне не удалось найти это на php.net. Является ли двойной знак равенства ( ==) чувствительным к регистру при использовании для сравнения строк в PHP?

Майкл Мрозек
источник

Ответы:

104

Да, с ==учетом регистра.

Вы можете использовать strcasecmpдля сравнения без учета регистра

Колин Пикард
источник
20

Да, но сравнение выполняется побайтно.

Если вы сравниваете строки Unicode, вы можете сначала нормализовать их. Смотрите Normalizerкласс.

Пример (вывод в 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 для понимания того, что на самом деле это не сравнение строк (это двоичное сравнение). Следовательно, это технически не чувствительно к регистру (хотя в 99,999% случаев он ведет себя точно так же) ...
ircmaxell
11

Да, с ==учетом регистра.

Кстати, для сравнения без учета регистра используйте strcasecmp:

<?php
    $var1 = "Hello";
    $var2 = "hello";
    echo (strcasecmp($var1, $var2) == 0); // TRUE;
?>
Стивен
источник
8

== учитывает регистр, да.

Для нечувствительного сравнения строк можно использовать либо, strtolower($x) == strtolower($y)либоstrcasecmp($x, $y) == 0

Frxstrem
источник
1

Да, с ==учетом регистра. Самый простой способ для меня - преобразовать в верхний регистр, а затем сравнить. Например:

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

Надеюсь это работает!

Сальви Паскуаль
источник
0

Вместо этого вы можете попробовать сравнить с хеш-функцией

  if( md5('string1') == md5('string2') ) {
    // strings are equal
  }else {
    // strings are not equal
  }
Сайт Антипас
источник