Str_split vs кириллица
1.
KOZZ (01.10.2010 / 07:11)
сама функция 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, т.е. от моих телодвижений ничего не изменилось)
в чем дело то?
2.
Ник (01.10.2010 / 08:22)
Хм.. собственно говоря,а обязательно тебе таким методом необходимо текст разбивать? Не проще ли просто разделить текст по пробелам и выводить? Конечно взгляд со своей колокольни и может немного отходит от поставленной задачи но все же :-D
$text = explode(' ','этот текст надо разделить на страницы');
Ну а дальше получаешь массив из слов и выводишь..
3.
Ant0ha (01.10.2010 / 08:23)
дели по словам, а не по символам - делать легче, результат качественней
$words = explode(' ', $text);
и тд и тп
4.
Ant0ha (01.10.2010 / 08:24)
гг, опоздал немного я)
5.
Ник (01.10.2010 / 08:25)
#4. Одинаково мыслим :-D
+ Практично и компактно..
6.
Ant0ha (01.10.2010 / 08:26)
точно)
7.
KOZZ (01.10.2010 / 08:42)
ну с таким же успехом можно делить по буквам и выводить по количеству символов, либо (недавно дошло) делить через substr(), и вручную заносить в массив
8.
Ant0ha (01.10.2010 / 09:22)
substr() не гуд:
1. она не дружит с uft8, почти везде в конце страницы будешь видеть квадратики
2. пернос слов не всегда будет корректным, даже если решишь проблему 1 (допустим через mb_substr()), например, на одной странице вконце будет
пр на другой вначале
ограммирование
9.
KOZZ (01.10.2010 / 09:30)
8, а если делить по пробелам, то как выводить? по количеству слов? слова бывают разной длины.
10.
Ant0ha (01.10.2010 / 09:39)
угу, по количеству слов
> слова бывают разной длины
большой роли не сыграет ;-)
11.
KOZZ (01.10.2010 / 09:42)
10, а можно в принципе и поизвращаться, считать количество букв в каждом слове, и выводить слова, пока не достигнет нужного количества букв ) хотя это уже изврат , согласен
12.
Ant0ha (01.10.2010 / 09:43)
вот пример вывода по словам:
http://demo.mobilecms.ru/lib/read_book.php?book_id=1
13.
KOZZ (01.10.2010 / 09:54)
12, сколько там слов на страницу?
14.
Ant0ha (01.10.2010 / 10:14)
300 слов
15.
KOZZ (02.10.2010 / 02:43)
Ant0ha +1, всем спасибо за помощь, темка клосед )
URL:
https://visavi.net/topics/14255