A muitos dias atras o Marcello e eu estavamos tentando fazer uma função que retornasse X caracteres de uma string sendo que esta string continha tags de HTML... O grande problema seria não quebrar a string na metade de uma tag e/ou deixar tags abertas.
Após alguns dias eu fiz a minha versão... nem sei se foi util pra ele mas segue ae pra todos... quem tiver alguma crítica, comenta ae!
<?php
function substrHTML($txt, $total) {
$offset = $count = 0;
while ($count < $total) {
preg_match('/([^&<]*)(.)?/',
$txt,
$rs,
NULL,
$offset);
if (($count + $len) > $total) {
$len = $total - $count;
$rs[2] = '';
}
$count += $len;
$offset += $len;
switch ($rs[2]) {
case '&':
$offset =
strpos($txt,
';',
$offset) +
1;
$count++;
break;
case '<':
if ($txt[$offset+1] == '/') {
} else {
preg_match('/<(.*?)[ >]/',
$txt,
$t,
NULL,
$offset);
$tag = $t[1];
}
$offset =
strpos($txt,
'>',
$offset) +
1;
break;
}
}
$result =
substr($txt,
0,
$offset);
if (count($stack)) $result .=
"</".
join($stack,
'></').
">";
return $result;
}
// vai imprimir
// "Hoje <b>está</b> muito complicada<b> a situaç</b>"
$txt = 'Hoje <b>está</b> muito complicada<b> a situação do povo para <font color="red"> trabalhar</font></b>';
print '"'.substrHTML
($txt,
35).
'"';
?>
Espero que seja util pra todos...
T+