Чтобы в PHP работать с кириллическими строками посимвольно(включая извлечение подстроки и др.) нужно использовать специальные функции:
http://php.net/manual/ru/ref.mbstring.php.
Всё из-за того, что на латинице 1 символ = 1 бит, поэтому:
$string = 'XYZ';
echo $string[0]; // будет равно X
Но кирилические символы занимают 2 бита, поэтому:
$string = 'ЭЮЯ';
echo $string[0]; // будет равно �
При этом можно это учитывать и работать в таком ключе:
$string = 'ЭЮЯ';
echo $string[0] . $string[1]; //output: Э
Или разбить строку через str_split, указав split_length = 2:
$string = 'ЭЮЯ';
$arrStr = str_split($string, 2); // = ['Э', 'Ю', 'Я']
Но так лучше не делать, потому что таким образом нельзя будет работать теперь с латиницей и остальными символами:
$string = 'ЭЮЯ. XYZAB';
$strArr = str_split($string, 2); // = ['Э', 'Ю', 'Я', '. ', 'XY', 'ZA', 'B']
Кстати, чтобы нормально разделить сроку с русскими символами на массив символов, то лучше всего это делать так:
$string = 'ЭЮЯ. XYZAB';
$strArr = preg_split('//u', $string, null, PREG_SPLIT_NO_EMPTY); // = ['Э', 'Ю', 'Я', '.', ' ', 'X', 'Y', 'Z', A', 'B']