Problème avec tronquation texte

Résolu/Fermé
croleo Messages postés 13 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 18 mars 2009 - 24 févr. 2009 à 14:37
croleo Messages postés 13 Date d'inscription mardi 24 février 2009 Statut Membre Dernière intervention 18 mars 2009 - 25 févr. 2009 à 15:02
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 vendredi 29 décembre 2006 Statut Membre Dernière intervention 15 mars 2016 189
24 févr. 2009 à 20:46
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 mardi 24 février 2009 Statut Membre Dernière intervention 18 mars 2009
25 févr. 2009 à 10:18
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 vendredi 29 décembre 2006 Statut Membre Dernière intervention 15 mars 2016 189
25 févr. 2009 à 11:38
bonjour,

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


bonne journée
0
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 mardi 24 février 2009 Statut Membre Dernière intervention 18 mars 2009
25 févr. 2009 à 15:02
Merci beaucoup!

ca fonctionne ^^
0