Обрезание текста с HTML тегами

collapse

Новичок
Обрезание текста с HTML тегами

Имеется текст с HTML тегами . Необходимо обрезать его длинну так чтобы он помещался в заданном блоке. Проблема в том что при обрезании например функцией substr обрезаются так же закрывающие теги, что приводит к развалу дизайна страницы. Да и теги хотелось бы оставить, то есть обрезать только визуальную часть текста. Бьюсь с этим второй день, но гениальная мысль меня не посетила. Ваши предложения, пожалуйста. Заранее спасибо.
 

ksnk

прохожий
collapse
Что значит "обрезать" и "чтобы он помещался"? Не самая, imho, тривиальная задача вычислить сколько места займет кусок html'я в броузере, особенно если вспомнить, что пользователь сам может менять размер шрифтов.

обрезать по ширине - правильно расставить символы скрытого переноса & shy;

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

denver

?>Скриптер
Гениальная мысль смотреть в мануал :) Смотри функцию:
http://php.net/wordwrap
И камменты к ней. Там этот велосипед уже 10 раз пересобирали.
 

collapse

Новичок
Есть html - код. Длина его 800 символов. Длина текста , который он отображает в браузере - 500 символов. Нужно уменьшить длину текста, который он отображает в браузере, до 300 символов. Проблема в том что это HTML - код и просто так, не повредив его структуру , обрезать не удаётся.
 

Vadim S.

Новичок
collapse, используйте регулярные выражения.

Как пример:
1. Регулярками убираете все теги, складываете их в массив
2. Берёте чистого текста 300 символов
3. Другой регуляркой возвращаете теги в эти триста символов из массива.
4. Выводите на страницу

Примерно так...Конечно придётся подумать над решением как это вырезать и собрать обратно чтоб всё красиво было=)
 

ksnk

прохожий
Ну, хорошо, вот еще запчасть к велосипеду
PHP:
$s="<span>Есть html - код. е повредив
 его структуру , обрезать не удаётся.</span>!!" ;
//echo $s;
function replaceit($matches) 
{
 global $max_len ;
 if (!$max_len) return '><';
 else if ($max_len<strlen($matches[1])) {
   $x=substr($matches[1],0,$max_len);$max_len=0;
   return ">".$x."<" ;
 } else 
   return ">".$matches[1]."<";
}
$max_len=10;
echo substr(preg_replace_callback("~(?:^|>)([^<]*)(?:<|$)~","replaceit",$s),1,-1);
PS. пробелов в регулярке не должно быть!!!!
 

bkonst

.. хочется странного?...
Ты сначала требования сформулируй. Может у тебя внутри обрезаемого кода таблицы.
 
Сверху