- function mon_couper($texte, $taille=50, $suite = ' (...)')
- {
- $offset = 400 + 2*$taille;
- while ($offset<$length
- $offset = 2*$offset;
- if ( $offset<$length
- if ($p_tag_fermant<$p_tag_ouvrant)
- $offset = $p_tag_fermant+1; // prolonger la coupe jusqu'au tag fermant suivant eventuel
- }
- $texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */
- // on utilise les \r pour passer entre les gouttes
- // sauts de ligne et paragraphes
- // supprimer les traits, lignes etc
- // supprimer les tags
- $texte = supprimer_tags($texte);
- $texte .= "\n"; // marquer la fin
- // travailler en accents charset
- $texte = unicode2charset(html2unicode($texte, /* secure */ true));
- $texte = nettoyer_raccourcis_typo($texte);
- $flag = 0;
- // corriger la longueur de coupe
- // en fonction de la presence de caracteres utf
- if ($GLOBALS['meta']['charset']=='utf-8'){
- $long = charset2unicode($texte);
- $sv_len = spip_strlen($long);
- if (spip_strlen($long) != $sv_len)
- $flag = 1;
- $taille += $nbcharutf;
- }
- // couper au mot precedent
- $u = $GLOBALS['meta']['pcre_u'];
- $points = $suite;
- // ne pas faire de (...) si pas de coupe
- if ($flag == 0) {
- $points = '';}
- // trop court ?
- $long = spip_substr($texte, 0, $taille);
- // encore trop court ? couper au caractere
- if (spip_strlen($texte) < 0.75 * $taille)
- $texte = $long;
- } else
- $texte = $court;
- //if (strpos($texte, "\n")) // la fin est encore la : c'est qu'on n'a pas de texte de suite
- // $points = '';
- // remettre les paragraphes
- // supprimer l'eventuelle entite finale mal coupee
- }
A mettre dans /squelettes/mes_fonctions.php et appeler par #TEXTE|mon_couper