UTF-8 - кодировка Unicode переменной длины: ASCII-символы занимают 1 байт, кириллица - 2 байта, иероглифы - 3 байта, эмодзи - 4 байта.
PHP строки - просто массивы байтов без привязки к кодировке. Стандартные функции (strlen, substr, strpos) работают с байтами. Для корректной работы с UTF-8 нужны mb_* функции.
С PHP 8.2 многие стандартные функции стали корректно работать с UTF-8 (например, strtolower для ASCII). Для полной поддержки Unicode используйте расширение intl (ICU).