Php по умолчанию не знает о utf-8. Предполагается, что любая строка является ASCII, поэтому strtolower преобразует байты, содержащие коды заглавных букв A-Z, в коды строчных a-z. Поскольку не-ascii буквы UTF-8 пишутся двумя или более байтами, strtolower преобразует каждый байт отдельно, и если в байте содержится код, равный буквам A-Z, он преобразуется. В результате последовательность нарушается и больше не представляет правильный символ.
Чтобы изменить это, вам нужно настроить расширение mbstring:
http://www.php.net/manual/en/book.mbstring.php
чтобы заменить strtolower на mb_strtolower или использовать mb_strtolower direclty. В любом случае вам нужно потратить некоторое время на настройку параметров mbstring в соответствии с вашими требованиями.