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 -
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);
?>
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:
- Problème avec tronquation texte
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Transcription audio en texte word gratuit - Guide
- Excel cellule couleur si condition texte - Guide
- Texte barré whatsapp - Guide
- Mettre un texte en majuscule - Guide
4 réponses
bonsoir,
je ne sais pas si ça peux t'aider, mais bon voici:
bonne soirée
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
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
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
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
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 }