Problème avec tronquation texte

Résolu
croleo Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -  
croleo Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -
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);

?>
A voir également:

4 réponses

Nico_ Messages postés 1219 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
croleo Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
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
Nico_ Messages postés 1219 Date d'inscription   Statut Membre Dernière intervention   189
 
bonjour,

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


bonne journée
0
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
croleo Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup!

ca fonctionne ^^
0