Fil wrote:
je te propose la fonction ci-dessous qui remplacerait "couper" et qui doit marcher avec des textes plus courts (le problème venait de la
Merci. Il faudrait le tester sur des chaînes de un ou deux mots comprenant
de 2 à 30 lettres (et avec des accents type é, tant qu'à faire de
patcher autant le faire "scientifiquement" 
-- Fil
Voici ma proposition complète pour la fonction couper. En plus de l'existante, elle prend en compte : la supression des tableaux, des puces, des lignes horizontales, des codes HTML. Elle fonctionne pour les textes long comme pour les courts.
J'en appelle aux bonnes volontées pour la tester complètement.
=============================================
function couper($texte, $long) {
$plus_petit = false;
// Conversion de la chaine en texte brut
$trans = array_flip(get_html_translation_table (HTML_ENTITIES));
$phrase_texte = strtr($texte, $trans);
// supprimer les liens
$phrase_texte = ereg_replace("\[([^\*)->([^]]*)\]","\\1", $phrase_texte);
// supprimer les notes
$phrase_texte = ereg_replace("\[\[([^]]|\][^]])*\]\]", "", $phrase_texte);
// supprimer les codes typos
$phrase_texte = ereg_replace("[{}]", "", $phrase_texte);
// supprimer les tableaux
$phrase_texte = ereg_replace("\|.*\|$", "", $phrase_texte);
// supprimer les listes à puces
$phrase_texte = ereg_replace("\-[\*|#]+", "", $phrase_texte);
// supprimer les balises HTML
$phrase_texte = ereg_replace("<[^<]*>", "", $phrase_texte);
// supprimer les traits de séparation
$phrase_texte = ereg_replace("-{4,}", "", $phrase_texte);
if (strlen($phrase_texte) > $long) {
$phrase_texte = substr($phrase_texte, 0, $long);
// Chercher à couper proprement (ie sur une fin de mot) la phrase
$phrase_texte = ereg_replace("([^[:space:]][[:space:]]+)[^[:space:]]*$", "\\1", $phrase_texte);
$plus_petit = true;
}
// Suppression des espaces de début et fin de chaîne
$phrase_texte = trim($phrase_texte);
if ($plus_petit) $phrase_texte .= ' (...)';
return $phrase_texte;
}