[PHP] Limiter le nombre de mots

Bonjour, mon script provenant de ce topic ne marche pas :
https://www.webmaster-hub.com/topic/27383-limiter-le-nombre-de-caractere-du-resultat-dune-requete/

<?php 
$retour = mysql_query('SELECT * FROM actualitees ORDER BY id DESC LIMIT 0,1') or die( mysql_error() );
$actu = mysql_fetch_array($retour) or die( mysql_error() );
?>

<?php
$nbCaracteres = 50;
if( strlen($actu) > $nbCaracteres ) 
{
 $extrait_actu = ereg_replace("(.{".$nbCaracteres."})( .*)$","\\1 ...", $actu);
}
else 
{
 $extrait_actu = $actu;
}
?>

<div id="actualites" >
<h3> <?php echo (html_entity_decode(stripslashes($extrait_actu['titre']))); ?> </h3> 
<p> <?php echo nl2br(html_entity_decode(stripslashes($extrait_actu['contenu']))); ?> </p>
</div>


Où est le problème svp ?

8 réponses

  1. Contributeur
    Salut,

    Ce code à l'air de limiter le nombre de caractères.

    Au lieu d'utiliser la fonction ereg_replace, utilise plutôt la fonction qui sert à prendre des portions de strings :

    $extrait_actu =  substr($actu, 0, $nbCaracteres);


    Manuel complet : https://www.php.net/manual/fr/function.substr.php

    @Bientôt et bonne prog
    1. Si tu veux limiter le nombre de mots, utilises la fonction explode.
      1. Merci beaucoup de vos réponses, mais je n'y arrive toujours pas...
        (honte à moi :s)

        Voici mon script:

        <?php
        $nbCaracteres = 5000;
        if( strlen($actu) > $nbCaracteres ) 
        {
         $extrait_actu = substr($actu, 0, $nbCaracteres);
        }
        else 
        {
         $extrait_actu = $actu;
        }
        ?>
        
        <div id="actualites" >
        <h3> <?php echo (html_entity_decode(stripslashes($extrait_actu['titre']))); ?> </h3> 
        <p> <?php echo nl2br(html_entity_decode(stripslashes($extrait_actu['contenu']))); ?> </p>
        </div>
        


        P.S:Je préfère limiter le nombre de caractères
        1. D'abord tu ne peux pas faire un substr dessus !
          Il faut que tu le fasses sur chacune de ses entrées.
          1. Désolé mais j'y arrive toujours pas :s

            Mon nouveau script:

            <?php 
            $retour = mysql_query('SELECT * FROM actualitees ORDER BY id DESC LIMIT 0,1') or die( mysql_error() );
            $actu = mysql_fetch_array($retour) or die( mysql_error() );
            ?>
            
            <?php
            $nbCaracteres = 5000;
            if( strlen($actu['contenu']) > $nbCaracteres ) 
            {
             $extrait_actu['contenu'] = substr($actu['contenu'], 0, $nbCaracteres);
            }
            else 
            {
             $extrait_actu['contenu'] = $actu['contenu'];
            }
            ?>
            
            <div id="actualites" >
            <h3> <?php echo (html_entity_decode(stripslashes($actu['titre']))); ?> </h3> 
            <p> <?php echo nl2br(html_entity_decode(stripslashes($extrait_actu['contenu']))); ?> </p>
            </div>
            


            P.S: Je veux juste effectuer la limite sur le contenu et non le titre
            1. Qu'est-ce qui ne fonctionne pas ?
              Tu ne vois rien du tout ?
              Ou le texte n'est pas coupé ?
              Essaye en déclarant l'array avant la condition
              $extrait_actu = array();