Daniel OG
per en 29 Agost 2011
1,141 Vistes

Aquesta funció útil programada en PHP obtén el primer paràgraf d'un text html (etiqueta <p>...</p>). Si és molt curt (segons el paràmetre $min_l) simplement agafa els primers $max_l caracters, eliminant tags i espais.

Els flags de la regex són i: no té en compte majúscules/minúscules,  s: inclou els salts de línia,   U: ungreedy (realment s'agafa així el primer paràgraf, en altre cas, s'agafaria tot el que hi hagués entre el primer i l'últim),  u: text amb caracters unicode.

Si volguérem agafar els dos primers paràgrafs, s'hauria de canviar la funció a preg_match_all i concatenar els dos primers 'matches'.

function resumText($text,$min_l=30,$max_l=250) {

$resum="";

if(preg_match('#<p[^>]*>(.*)</p>#isUu',$text,$m)) {
  $resum=$m[1];

}

if(strlen($resum)<$min_l) {
  
$resum=$text;
}

$resum=strip_tags($resum);
$resum=preg_replace('/[\s]+/u',' ',$resum); //elimina espais extra i linies
$resum=mb_substr($resum,0,$max_l);

return $resum;

}

Publicat a: Personal
Sigues el primer a qui li agrada això.
Daniel OG
Observacions, si s'usa unicode, es necessitaria establir globalment: mb_internal_encoding("UTF-8");
29 Agost 2011
Daniel OG
... i usar en comptes d'strlen la funció mb_strlen
18 Novembre 2011