Выбор ответа Senior Строки обновлено

Сравнение строк в UTF-8 без учёта регистра

Вопрос

Нужно сравнить "ПРИВЕТ" и "привет" без учёта регистра. Что сработает в PHP 8.3 без расширения intl?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: mbstrtolower($a) === mbstrtolower($b). strcasecmp и strtolower работают с байтами по ASCII: с PHP 8.2 они вообще не зависят от локали и не трогают кириллицу.

Варианты ответа

  1. strcasecmp($a, $b) === 0
  2. mb_strtolower($a) === mb_strtolower($b)правильный ответ
  3. strtolower($a) === strtolower($b)
  4. $a == $b

Разбор

strcasecmp и strtolower работают с байтами по ASCII: с PHP 8.2 они вообще не зависят от локали и не трогают кириллицу. Корректно только mb_strtolower (или mb_convert_case с MB_CASE_FOLD). Нестрогое == сравнит строки побайтово с учётом регистра.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.