To replicate mb_strtolower()
without mbstring, maybe try to use a ICU transliterator like Transliterator::create('Lower')
(possibly wrapped in NFD/NFC normalization), maybe like (didnt check) $lower = Normalizer::normalize(Transliterator::create('Lower')->transliterate(Normalizer::normalize($text, Normalizer::FORM_D)), Normalizer::FORM_C);