Въпрос за ограничаване на броя на симоволите

shaxaaa

Registered
Здравейте,
Имам една система за писане на статии, която съм направил, която записва в БД статиите като им вкарва съответни html низове - напрамер <span><b> и така нататък едва ли не bbcode. След това обаче искам да изведа от тази таблица, новината като я съкратя да изкарва примерно 30 думи на заглавната и да поставя бутон прочети повече. Проблема е че брои за думи съответно и html низовете. А това е проблем.

Решението естествено е да сложа strip_tags(); - но тогава преброявам думите и връщам резултата, но се губи ефекта, който е постигнат с html кода. Има ли някакъв начин по който след това отново да позволя да прочете html tagovete. Просто сайта се прецеква като имам примерно в БД <span><b> Zdravei </b></span>
Ако сложа ограничение на 3 думи. Ще прочете 1) span; 2) b; 3) Zdravei и след това слага примерно ..., но това означава че имаме незатворени тагове и ми се размества съдържанието на сайта.

Ако някой може да ми предложи решение
 
някой ако се сеща примерно за начин да изключа всичко, което се намира между "<>" да не се брои за думи или нещо такова, но това пак не гарантира, че ще се затворят низовете
 
$reszad=mb_substr($row['10'] ,0,25,'UTF-8'

като с $row['10'] подаваш текста от полето а ,0,25,'UTF-8' определяш от кои до кои символ да покажеш в случая от символ 0 до мах символ 25 като уточняваш че текста е в UTF-8 за мулти баита

$reszad го слагаш в html-a между таговете
 
не не си ме разбрал какво искам, ммм имам една идея за решението по нестандартна ама и нея не я знам как да я направя.

Понеже за нов ред прави <p></p>

Да изкарва низ заключен между <p></p>, ако той е по - малко от 10 думи примерно, да отиде на втори низ <p></p>, да събере от двете думите и ако надвишават 10, след затварянето на </p> да сложи "прочети повече". Ако някой има идея как да стане
 
Значи знам как да изкарам резултат между две <p></p>

Код:
<?php 
function get_between($input, $start, $end) 
 { 
   $substr = substr($input, strlen($start)+strpos($input, $start), (strlen($input) - strpos($input, $end))*(-1)); 
   return $substr; 
 } 

Така от примерно това: 

$string = "<p>Zdravei</p>"; 
$a = "<p>"; 
$b = "</p>"; 

 echo get_between($string, $a, $b); 

Ще изкара това:
 
Zdravei

?>

Но понеже в даден текст има много текст записан между <p></p> - трябва резултатите да влязат в масив и да се брои между всеки таг по колко думи има и като надвишат 10 думи да спре до този таг от масива, в който се надвишават тези думи и да сложи прочети повече.
 
ако ползваш само думи има начин но ако има в текста и цифри се осложняват нещата. а ако искаш нов ред не ползваи <p></p> а само накрая на стринга слагаш <br/>
можеш да си спестиш доста главоболия ако ползваш редактор като WYSIWYG Editor (http://tinymce.moxiecode.com/)
 

Back
Горе