Разбить строку на символы (php)

LX
На сайте с 11.06.2007
Offline
28
13993

Доброго!

Понимаю, что задача смешная, но самому ее выполнить почему-то не получается.

Итак, есть переменная $text, содержащая некий текст в utf8 (напр. "текст текст").

С помощью echo $text[$i] пытаюсь получить некий символ из этой строки. Однако вместо символа из указанной позиции получаю какие-то странные символы из алфавита внеземных цивилизаций.

Имею две версии касательно причины сей неразберихи:

1. В utf8, насколько я знаю, каждый символ представляется 2-мя байтами, а не одним, и читать символы надо как-то по-другому;

2. Пришельцы наконец-таки решили войти в контакт с человечеством, и выбрали меня в качестве посредника.

Подскажите пожалуйста, как еще можно получить символ из определенной позиции?

ЗЫ: с substr($text,$i,1) таже-самая история.

Ѣ-программисты пишут на Petrovich (http://2lx.ru/2009/05/yazyk-programmirovaniya-petrovich/) и Ook! (http://2lx.ru/2009/06/yazyk-programmirovaniya-ook/) Нечего кушать? Подои Зорьку (http://zorkabiz.ru/?zorka=1071)! Мууу...
gerkon
На сайте с 21.10.2005
Offline
40
#1

А если iconv попробовать перекодировать из ЮТФ8 в 1251? И посмотреть что получится?

C уважением, Андрей. Пользуюсь этим хостингом уже 4 года! (http://www.replay.ru/index.php?part_id=3600) Ведущий манул Pixshock.net (http://www.pixshock.net)
TI
На сайте с 24.09.2008
Offline
14
#2
Le)(x:
Доброго!
Понимаю, что задача смешная, но самому ее выполнить почему-то не получается.
Итак, есть переменная $text, содержащая некий текст в utf8 (напр. "текст текст").
С помощью echo $text[$i] пытаюсь получить некий символ из этой строки. Однако вместо символа из указанной позиции получаю какие-то странные символы из алфавита внеземных цивилизаций.

Имею две версии касательно причины сей неразберихи:
1. В utf8, насколько я знаю, каждый символ представляется 2-мя байтами, а не одним, и читать символы надо как-то по-другому;
2. Пришельцы наконец-таки решили войти в контакт с человечеством, и выбрали меня в качестве посредника.

Подскажите пожалуйста, как еще можно получить символ из определенной позиции?

ЗЫ: с substr($text,$i,1) таже-самая история.

По идее, процессору php должно быть абсолютно фиолетово, в какой кодировке у вас текст.

Продаю железнодорожные модели PIKO. (http://www.piko-shop.ru)
DI
На сайте с 03.01.2007
Offline
123
#3

http://ru.php.net/substr

сделайте ctrl+F по "utf" - там в комментах есть примеры функций.

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
BR
На сайте с 28.06.2008
Offline
75
#4
technik_it:
По идее, процессору php должно быть абсолютно фиолетово, в какой кодировке у вас текст.

- Вы ошибаетесь, PHP-парсер работает в определенной кодировке, которую берет либо из переменных окружения среды, либо, в случае использования, из setlocale. В простейших случаях, как уже советовали выше, можно спользовать iconv, а вообще PHP и UTF-8 - это песня :)

Brim.ru добавил 13.10.2008 в 15:08

DenIT:
http://ru.php.net/substr
сделайте ctrl+F по "utf" - там в комментах есть примеры функций.

- тогда уж mb_substr

размещение сайтов (http://www.brim.ru)
DI
На сайте с 03.01.2007
Offline
123
#5
Brim.ru:
тогда уж mb_substr

Да, если установлен. Я обычно сначала указываю способы решения стандартными средствами, если есть такая возможность:)

LX
На сайте с 11.06.2007
Offline
28
#6
- тогда уж mb_substr

То что надо!

Спасибо огромное!

E
На сайте с 15.11.2008
Offline
0
#7
Brim.ru:
- тогда уж mb_substr

Столкнулся с тем же... Но есть загвоздка в виде неустановленного модуля mbstring:

"mbstring is a non-default extension. This means it is not enabled by default."

Нашел решение здесь. Функция utf8_substr проверяет наличие mb_substr и iconv_substr (в порядке их быстродействия), при отсутствии - использует regexp.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий