Корректная разбивка текста на блоки - PHP

12
M7
На сайте с 31.03.2012
Offline
14
1772

Здравствуйте. Нуждаюсь в совете более искушенных php-шников.

Ситуация. Есть некий текст неизвестной длины.

Надо разбивать текст на блоки. Чтобы каждый блок помещался в фиксированном div, страницах книги.

Сначала: в левом листе книги - меню, в правом - первый блок текста. Если текст не влазит - нажимаю далее. Аяксом гружу в левый лист второй блок, если и его мало - то в правый лист - третий блок и т.д.

Допустим, 1000 знаков utf-8 влазят в блок.

Код:

$text = strip_tags ($text);

$strlength = mb_strlen($text,'UTF-8');

function obrez($str, $limit)

{

$str = mb_substr($str,0,$limit+1,'UTF-8');

return substr($str,0,strrpos($str,' '));

}

$text_prev = obrez($text, 1000);

Тут все хорошо. Я обрезал первую часть текста до пробела, чтобы не резать слово...

Дальше - хуже.

Я пытаюсь обрезать второй (энный) блок. Но тут, если я режу от 1000-ого знака, начало - произвольная буква. Мне нужно, чтобо обрезало от начала слова. Грубо говоря: стартом mb_substr должен быть не 1000, а позиция пробела - первого перед 1000.

function obrez2($str, $limit)

{

$str = mb_substr($str,1000,$limit+1,'UTF-8');

return substr($str,0,strrpos($str,' '));

}

Как мне узнавать позицию этого пробела???

Спасибо!

samimages
На сайте с 31.05.2009
Offline
427
#1

http://php.ru/forum/viewtopic.php?t=27083

Вот здесь почти готовое решение

Опыт как иммунитет — приобретается в муках! Аудит семантики от 15К [долго] - ЛС
M7
На сайте с 31.03.2012
Offline
14
#2
samimages:
http://php.ru/forum/viewtopic.php?t=27083
Вот здесь почти готовое решение

Вы, простите, читали мой вопрос???!

В приведенной теме парень хочет отрезать от начала и до знака, что я успешно сделал и указал в теме...

Мне надо ВТОРОЙ блок. Не от номера знака, а от номера пробела, перед этим знаком...

Строго говоря, мне надо узнать, какой номер в строке занимает пробел, расположенный перед заданным числом-знаком.

samimages
На сайте с 31.05.2009
Offline
427
#3
mayor777:

Дальше - хуже.
Я пытаюсь обрезать второй (энный) блок. Но тут, если я режу от 1000-ого знака, начало - произвольная буква. Мне нужно, чтобо обрезало от начала слова.

Тот блок (по ссылке) будет резать строку по словам. Нет ни какой причины думать, что отрезав первый кусок строки, вы не сможете определить начало следующей части и т.д.

Или не сможете?😂

---------- Добавлено 30.10.2013 в 16:48 ----------

mayor777:

Строго говоря, мне надо узнать, какой номер в строке занимает пробел, расположенный перед заданным числом-знаком.

Разбивайте по пробелам и считайте? Вы же не этого хотите?..

M7
На сайте с 31.03.2012
Offline
14
#4
samimages:
Или не сможете?😂

, нет, я тупой!

Что мне вместо нуля ставить в mb_substr, чтобы резало от пробела перед нужным мне числом?

Ну, вам виднее, чего я хочу, видимо... Просто я другой логики, не могу притянуть сюда, иначе, как найти предыдущий пробел, перед нужным мне числом и резать от его номера... Вот и хочу узнать, как этот номер определить.

Если я не прав - подскажите логику.

Пространные наталкивания, которые очевидны вам - мне не ясны... Можно конкретики?

samimages
На сайте с 31.05.2009
Offline
427
#5

Конкретика - формируйте массив обрезая по словам, а не по знакам.

т.е. ключевая функция wordwrap вот от ее результатов и отталкивайтесь. Тогда во второй части у вас будет не случайная буква, а начало слова, или предлог, или союз, или пунктуация.

Также возможны еще варианты из-за UTF-8

M7
На сайте с 31.03.2012
Offline
14
#6
samimages:
т.е. ключевая функция wordwrap вот от ее результатов и отталкивайтесь. Тогда во второй части у вас будет не случайная буква, а начало слова, или предлог, или союз, или пунктуация.
Также возможны еще варианты из-за UTF-8

ну зная пакости с utf-8, я хочу резать знаками, а не словами. wordwrap - это прекрасно, но слова будут разной длины и объем блока текста будет очень колебаться и может вылазить за div...

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#7

1. Создайте массив из предложений т.е. разбивка по точке

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

В чём проблема?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
M7
На сайте с 31.03.2012
Offline
14
#8
LEOnidUKG:
1. Создайте массив из предложений т.е. разбивка по точке
2. Перебирайте массив создавая новый, проверяя количество знаков

В чём проблема?

, ага...

и если предложение больше и не влазит - я его обрубаю и у меня заполнено всего пол блока, т.к. предложение могло быть сложным, длинным...

Не гоните беса! Подскажите как по знакам считать... 😡😂

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#9
mayor777:
, ага...

и если предложение больше и не влазит - я его обрубаю и у меня заполнено всего пол блока, т.к. предложение могло быть сложным, длинным...

Не гоните беса! Подскажите как по знакам считать... 😡😂

Если оно больше, то создаётся следующий элемент массива и перебор идёт дальше. Вам, что нужно забить символами 100% из 100% дива? Фигнёй не майтесь.

---------- Добавлено 30.10.2013 в 18:37 ----------

Если хотите уж такую ювелирную точность, то создавайте по пробелам массив и опять же перебирайте и создавайте новый.

samimages
На сайте с 31.05.2009
Offline
427
#10

Я запутался...

Что важнее 100% корректно забить блок или начать новый не с буквы, а со слова?

12

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