Чи == у PHP порівняння рядків з урахуванням регістру?


88

Мені не вдалося знайти це на php.net. Чи ==чутливий регістр подвійного знака рівності ( ) при використанні для порівняння рядків у PHP?

Відповіді:



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



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
  }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.