Problème avec tronquation texte

Résolu
croleo Messages postés 14 Statut Membre -  
croleo Messages postés 14 Statut Membre -
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. Nico_ Messages postés 1220 Date d'inscription   Statut Membre Dernière intervention   189
     
    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
  2. croleo Messages postés 14 Statut Membre
     
    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. Nico_ Messages postés 1220 Date d'inscription   Statut Membre Dernière intervention   189
       
      bonjour,

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


      bonne journée
      0
  3. toto
     
    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
  4. croleo Messages postés 14 Statut Membre
     
    Merci beaucoup!

    ca fonctionne ^^
    0