Str_split vs кириллица

Печать RSS
193

K
Автор
Транклюкаторщик
0
сама функция str_split() с кириллицей в utf-8 не дружит, взял функцию из комментариев в php.net, так же тут мне советовали ее же.
Но то ли у меня руки из ануса, то ли функция реально неадекватно себя ведет
насколько я понял, за количество символов, на которые будет разбиваться строка, отвечает переменная $split
допустим, я использую свой же код из 39 поста, в самом начале втыкаю эту функцию, и присваиваю $split значение 10 (для примера).
<? 
function utf8_str_split($str) {  
    // place each character of the string into and array  
    $split=10;  
    $array = array();  
    for ( $i=0; $i < strlen( $str ); ){  
        $value = ord($str[$i]);  
        if($value > 127){  
            if($value >= 192 && $value <= 223)  
                $split=2;  
            elseif($value >= 224 && $value <= 239)  
                $split=3;  
            elseif($value >= 240 && $value <= 247)  
                $split=4;  
        }else{  
            $split=1;  
        }  
            $key = NULL;  
        for ( $j = 0; $j < $split; $j++, $i++ ) {  
            $key .= $str[$i];  
        }  
        array_push( $array, $key );  
    }  
    return $array;  
}  

$text = 'этот текст надо разделить на страницы';   
$symb_onpage = 10; # количество символов на страницу   
$page = (isset($_GET['page'])) ? abs(intval($_GET['page'])) : 0; # номер страницы, дописывать в адресную строку (если не 0)

$arr = utf8_str_split($text,$symb_onpage);   

if(array_key_exists($page,$arr))   
{  
if(trim($arr[$page]) !== ''){echo trim($arr[$page]);}  
} else {echo 'Страницы не существует!';}   

# Навигация 
if(count($arr) !== 0 && count($arr) !== 1){  
echo '<br/>';  
if($page != 0){echo '<a href="?page='.($page-1).'">Назад </a>';echo '['.($page+1).']';}  

if($page != count($arr)-1){echo '<a href="?page='.($page+1).'"> Вперед</a>';}  
}  
?>

а в ответ получаю разделенный по 1 символу массив. (вместо 10, т.е. от моих телодвижений ничего не изменилось)
в чем дело то?
Изменил: KOZZ (01.10.2010 / 07:14)
Н

Землянин
0
Хм.. собственно говоря,а обязательно тебе таким методом необходимо текст разбивать? Не проще ли просто разделить текст по пробелам и выводить? Конечно взгляд со своей колокольни и может немного отходит от поставленной задачи но все же :-D
$text = explode(' ','этот текст надо разделить на страницы');
Ну а дальше получаешь массив из слов и выводишь..
Изменил: Ник (01.10.2010 / 08:22)
A

Чатланин
0
дели по словам, а не по символам - делать легче, результат качественней

$words = explode(' ', $text);

и тд и тп
A

Чатланин
0
гг, опоздал немного я)
Н

Землянин
0
#4. Одинаково мыслим :-D
+ Практично и компактно..
A

Чатланин
0
точно)
K
Автор
Транклюкаторщик
0
ну с таким же успехом можно делить по буквам и выводить по количеству символов, либо (недавно дошло) делить через substr(), и вручную заносить в массив
A

Чатланин
0
substr() не гуд:
1. она не дружит с uft8, почти везде в конце страницы будешь видеть квадратики
2. пернос слов не всегда будет корректным, даже если решишь проблему 1 (допустим через mb_substr()), например, на одной странице вконце будет пр на другой вначале ограммирование
K
Автор
Транклюкаторщик
0
8, а если делить по пробелам, то как выводить? по количеству слов? слова бывают разной длины.
A

Чатланин
0
угу, по количеству слов

> слова бывают разной длины
большой роли не сыграет ;-)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск