[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. 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();
        2. Si tu veux limiter le nombre de mots, utilises la fonction explode.