Problème avec tronquation texte

Résolu
Bonjour à vous tous! J'espère que vous pourrez m'aider à régler mon petit soucis avec mon script PHP.
Je souhaite faire un script qui génère une "bulle info" avec un texte aléatoire, en utilisant la génération d'une image en php.
Tout fonction sauf, les retours à la ligne...Qui me coupe n'importe comment les lignes quand il y a plus de 3 lignes.
Je compte le nombre de caractères dans ma phrase et ensuite j'utilise une fonction qui tronque le texte. Je ne sais pas où est le problème dans mon code, je tourne en rond depuis un moment dessus. Si quelqu'un pouvait m'aider à me débloquer ça sera sympa ^^'.

Voila je vous laisse le code de ma page fonction.php et celui de ma page bulle.php

Merci pour votre aide!

fonction.php
Code : PHP

<?php
function tronquer(&$texte, $c_min, &$c_max, &$l, &$i, $nbc)
{
$space=0;
$i++;
$l=substr($texte,$c_min,$c_max);
$space=strrpos($l, " ");
$space++;
$l=substr($texte,$c_min,$space);
$texte=substr($texte,$space);
$c_max=$nbc[$i];
}
?>

Bulle.php
Code : PHP
<?php
include("fonction.php");

$nbc=array(21,24,26,26,26,24,21);
$x=array(35,20,15,15,15,20,35);
$y=array(35,50,65,80,95,110,125);

$i=0;
$j=0;
$cmin=0;
$texte="Savez-vous que vous utilisez une borne WiFi? Bonjour! Ca va? Bon weekend?";
$taille=strlen($texte);
$texte=$texte." ";

switch($taille)
{
case ($taille<26):
$nb=1;
$i=3;
break;
case ($taille>26) && ($taille<=52):
$nb=2;
$i=2;
break;
case ($taille>52) && ($taille<=78):
$nb=3;
$i=2;
break;
case ($taille>78) && ($taille<=102):
$nb=4;
$i=1;
break;
case ($taille>102) && ($taille<=126):
$nb=5;
$i=1;
break;
case ($taille>126) && ($taille<=147):
$nb=6;
$i=0;
break;
case ($taille>147):
$nb=7;
$i=0;
break;
}

$cmax=$nbc[$i];

header("Content-type: image/png");

$image=imagecreatefrompng("img/bulle.png");

$fond=imagecolorallocate($image, 255, 255, 255);
$couleur=imagecolorallocate($image, 255, 159, 45);

imagecolortransparent($image, $fond);
while($j<$nb)
{
tronquer($texte,$cmin,$cmax,$ligne,$i,$nbc);
imagestring($image, 5, $x[$i], $y[$i], $ligne, $couleur);
$j++;
}
imagepng($image);

?>
Configuration: Windows XP
Firefox 3.0.6

4 réponses

  1. bonsoir,

    je ne sais pas si ça peux t'aider, mais bon voici:

    <?php
    echo wordwrap($texte, 26, "<br />", true);
    // $texte = le texte que je veux afficher (récupération de la variable)
    // 26 = au bout de XX caractère (ici 26) je fais l'action
    // "<br />" = l'action une fois le nombre de caractères atteint
    ?>

    bonne soirée
    0
    1. Merci!
      Elle marche parfaitement mais pas quand je souhaite l'intégrer dans mon code qui permet de générer une image en php, les retours à la ligne ne fonctionnent pas. . .

      Si quelqu'un aurait une solution pour cela ca pourra m'être très utile
      0
      1. bonjour,

        essai :
        echo wordwrap($texte, 26, "\n", true);
        


        bonne journée
        0
    2. Bonjour

      puisque imagestring ne gère pas les retours à la ligne, il suffit de ré-écrire chaque morceau de ligne en dessous du précédent
      D'abord tu découpes ta ligne avec wordwrap comme Nico te l'a suggéré (mais avec des \n au lieu des <br/>)
      ensuite tu exploses ta ligne avec explode pour séparer les morceaux - tu obtiens un tableau
      enfin, tu fais un imagestring de chacune des lignes du tableau en augmentant y à chaque fois pour passer à la ligne
      ça doit donner quelque chose comme ça

      $ligne=wordwrap($ligne,26,"\n");
      $tbl=explode("\n",$ligne);
      $y=5;  // première ligne
      for ($k=0; $k<count($tbl);$k++) {
        imagestring($image, 5, 10, $y, $tbl[$k], $couleur);
        $y+=12; // interligne
      }
      0
      1. Merci beaucoup!

        ca fonctionne ^^
        0