Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je cherche à tronquer du texte de cette façon:

$str = str_replace("\'","'",$donnees->contenu );
echo nl2br(substr($str, 0, 255));

Mais ça donne un peu n'importe quoi.
Habituellement j'affiche mon contenu de cette façon:

    $str = str_replace("\'","'",$donnees->contenu );
    echo nl2br($str);

et ça fonctionne bien. Je vous remercie de votre aide.

5 réponses


Carouge10
Réponse acceptée

Salut,
J'utilise cette fonction pour couper un texte trop long sans avoir des problèmes de balise (< a>, < p>, < img> ...)

/**
 * RÉSUMÉ BRUT d'un texte (HTML ou non) : en fonction du NOMBRE de CARACTERES
 * + Suppression des balises HTML éventuelles
 * ---------------------------------------------------
 * © Jérome Réaux : http://j-reaux.developpez.com - http://www.jerome-reaux-creations.fr
 * Création : juin 2009 en collectif : Xunil, jreaux62, s.n.a.f.u., FoxLeRenard, Doksuri, Patouche
 * http://www.developpez.net/forums/d757484-8/php/langage/contribuez/discussion-reparer-code-html/
 * Pour ne pas couper un mot, le compte s'arrêtera à l'espace suivant
 * ---------------------------------------------------
 * @param string $texte Le texte initial (avec ou sans des balises HTML)
 * @param int $nbreCar Le NOMBRE de caractères texte à afficher (sans compter les balises HTML)
 * @return string Texte couper
 */
function texte_resume_brut($texte, $nbreCar) {
    $texte = trim(strip_tags($texte, '<br><p><a>')); // suppression des balises HTML
    if(is_numeric($nbreCar))
    {
        // COUPE DU TEXTE pour le RÉSUMÉ
        // ajout d'un espace de fin au cas où le texte n'en contiendrait pas...
        $texte .= ' ';
        $LongueurAvant = strlen($texte);
        if ($LongueurAvant > $nbreCar) {
            // pour ne pas couper un mot, on va à l'espace suivant
            $texte = substr($texte, 0, strpos($texte, ' ', $nbreCar));
        }
    }
    return $texte;
}
barpoi78
Auteur

J'essai aussi de cette façon, mais pareil:

$str = str_replace("\'","'",$donnees->contenu );
echo mb_strimwidth($str, 0, 255, "...");

Salut,

Mais ça donne un peu n'importe quoi.

Qu'est ce que tu appelles n'importe quoi ?

barpoi78
Auteur

Merci. J'ai vu qu'avec strip_tags ça fonctionnait pas non plus mais pas avec la césure des mots.