Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > строка как массив


Автор: part_spb 3.6.2009, 20:23
есть   переменная в котрой содержится   некоторое словj (в кодировке utf )
при обращении к отдельным буквам  слова   как  к элементам массива, возникают проблемы.
к примеру
$var="привет"    при   echo $var[2]    должна выводится буква и ,  но  этого не происходит.
понимаю  что это все из за utf-8, так как там используется 2 байта. может есть    подобное решение  для  UTF?

Автор: enof 3.6.2009, 20:26
http://php.net/str_split
В соседней теме тоже самое.

Автор: part_spb 3.6.2009, 23:49
нет функция str_split  не правильно работает с utf-8 ,  если есть кирилица.

Автор: mogul82 4.6.2009, 01:51
Цитата(part_spb @  3.6.2009,  20:23 Найти цитируемый пост)
 так как там используется 2 байта. м


В utf-8 используется 8 бит, ASCII 7 бит. а в Юникоде (utf-16) 16 бит.
Эт я так.

Автор: enof 4.6.2009, 05:48
part_spb, для этого случая есть mb_* функции.
Цитата(mogul82 @  4.6.2009,  02:51 Найти цитируемый пост)
В utf-8 используется 8 бит, ASCII 7 бит. а в Юникоде (utf-16) 16 бит.

Спасибо, не знал.

Автор: unicross 4.6.2009, 10:47
Код

<?php
header('Content-Type: text/html; charset=utf-8');
$str = 'Строка';
$count = mb_strlen($str, 'UTF-8');
$arr = array();
for ($i=0; $i<$count; $i++) {
   $arr[] = mb_substr($str, $i, 1, 'UTF-8');
}
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

Цитата(mogul82 @  4.6.2009,  02:51 Найти цитируемый пост)
В utf-8 используется 8 бит, ASCII 7 бит. а в Юникоде (utf-16) 16 бит.

mogul82, к вашему сведению. Кодировка UTF-8 кодирует символы разным количеством байт. От 1 байта до 6 байт (в реальности только до 4 байт). Русские буквы кодируются 2 байтами (т.е. 16 битами). Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII.

Автор: mogul82 4.6.2009, 12:19
unicross, 
Ты где ерунды такой начитался?

Мож они и превращаються но храняться так как я сказал.

Автор: unicross 4.6.2009, 12:34
Цитата(mogul82 @  4.6.2009,  13:19 Найти цитируемый пост)
Ты где ерунды такой начитался?

http://ru.wikipedia.org/wiki/UTF-8
Если бы символы русского алфавита кодировались всего 8 битами, то хватило бы функции str_split(), а также можно было бы обратиться в символу как к элементу массива...

Автор: part_spb 4.6.2009, 12:34
да, спасибо всем проблема  частиччно решилась 
mogul82 , unicross   все правильно говорит   при использовании кририлицы  в UTF-8 используется два  байта, но не как не    8бит  (1байт)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)