| |
|
|
| | Есть текст в одну строку, состоящий из сообщений пользователей чата. Каждое сообщение начинается со времени его создания, примерно это может выглядеть так:
..... 14:49:30 Бабай(гость) Красноярск Бабай пришлите картинки<ems:br>14:42:23 ОТКРОВЕНИЕ Ушел из чата:<ems:br>14:57:23 Tibald(гость) Всем привет ......
|
Нужно в этой строке, через каждые 450 символов(не больше) вставить перевод строки \r\n таким образом, чтобы этот перевод оказался непосредственно перед последним сообщением юзера,
например:
..... Бабай(гость) Красноярск Бабай пришлите картинки<ems:br>14:42:23 ОТКРОВЕНИЕ Ушел из чата:<ems:br> \r\n 14:57:23 Tibald(гость) Всем привет .....
|
То есть, чтобы перевод строки при этом не был внутри сообщения.
Подскажите, пожалуйста, каким образом это возможно реализовать? | |
| |
|
|
| |
|
|
| |
для: Loneliness
(14.01.2007 в 19:37)
| | | Нужно привести сообщения к токому виду???
14:49:30 Бабай(гость) Красноярск Бабай пришлите картинки
14:42:23 ОТКРОВЕНИЕ Ушел из чата:
14:57:23 Tibald(гость) Всем привет
|
или как? | |
| |
|
|
| |
|
|
| |
для: Alph[p]a
(14.01.2007 в 19:56)
| | | Нет, перевод строки нужен не после каждого сообщения, а перед каждым сообщением, ближайшим к каждому 450-му символу строки.
Схематично так:
14:49:35 Cообщение-№1 14:49:45 сообщение-№2............. \r\n 15:25:26 Сообщение-№ИКС содержащее 450-й по порядку символ строки 15:30:23 Сообщение-№X+1 15:32:12 Сообщение№X+2....... \r\n 16:30:00 Сообщение-№Y содержащее в себе 900-й по порядку символ строки...
|
То есть, нужно перед каждым сообщением, содержащим в себе символ с порядковым номером кратным 450 сделать перевод строки \r\n
wordwrap(); делит, но точно на заданное количество символов, тем самым часто разделяя переводом строки само сообщение пользователя, а мне это неприемлемо. | |
| |
|
|
| |
|
|
| |
для: Loneliness
(14.01.2007 в 19:37)
| | | Идея в следующем: отсчитываем 450 символов и начинаем идти обратно. как только встречаем начало сообщения, вставляем перевод строки. Цикл повторяем, начиная с этого перевода. | |
| |
|
|
| |
|
|
| |
для: Киналь
(14.01.2007 в 21:02)
| | | Идея по сути верная, только в том-то и проблема, что в силу своей малой осведомленности в php, очевидно, я не могу сообразить, как ее реализовать в конкретном коде. Буду очень благодарен за практические примеры такой реализации. | |
| |
|
|
| |
|
|
| |
для: Loneliness
(14.01.2007 в 21:49)
| | | Никто не может ничем помочь? ;-( | |
| |
|
|
| |
|
|
| |
для: Loneliness
(14.01.2007 в 21:49)
| | | Вот похожая функция; вырезает первые $end_point символов или больше - пока не встретит пробел.
<?php
function first_words($text, $end_point)
{
if ($end_point >= strlen($text)) return $text;
while (true)
{
$tmp_text=substr($text, 0, $end_point+1); // вместо нуля поставьте номер начального символа
if ($tmp_text[$end_point] != ' ') // вместо пробела поставьте признак начала сообщения
$end_point++; // поменяйте на декремент
else
break;
if ($end_point == strlen($text)) return $text;
}
return $tmp_text.' ...';
}
?>
|
Надо только добавить параметр с начальным символом, и вставить весь цикл в другой, который и будет этот параметр менять. | |
| |
|
|