Показать сообщение отдельно
  #4 (permalink)  
Старый 06.06.2013, 20:25
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

В PHP исходный код представляется в однобайтовой кодировке, и также строки состоят только из символов в однобайтовой кодировке, или байтов.
Каждая буква русского алфавита в UTF-8 представляется двумя байтами, отсюда и данная проблема. Иными словами, strlen показывает количество байтов в строке, и все функции, работающие со строками, работают с отдельными байтами.
Я вижу 2 способа решить эту проблему.
1) Отправить строку на клиент как есть, а уже на клиенте с помощью Джаваскрипта расположить буквы вертикально.
2) Воспользоваться тем, что в UTF-8 первый байт последовательности байтов, представляющей один пункт Юникода, является в пределах 0 - 127 или 196 - 255, а остальные байты не являются. Поэтому на PHP можно написать собственную функцию, вставляющую "<br>" между пунктами Юникода, вместо implode.
Ответить с цитированием