Je crée un générateur de mème, Imagick générant les images. Mon problème est que même si je fais certaines opérations sur la chaîne que j'utilise pour l'image, la sortie est incorrecte.strip_tags et trim ne fonctionnent pas correctement
Par exemple:
$_POST['text_top'] = " test test<br>"; //(starts with a space)
Alors je fais:
$text_top = strip_tags(trim($_POST['text_top']));
Mais sur l'écran de text_top $, après que je colle la variable sur l'image, je reçois:
 test test<br>
Pourquoi cela se passe-t-il si j'appelle strip_tags et trim, d'après ce que je vois, corrige et comme d'habitude?
Tout est codé en UTF8.
Merci!
EDIT: (code complet)
function wordWrapAnnotation(&$image, &$draw, $text, $maxWidth)
{
$words = explode(" ", $text);
$lines = array();
$i = 0;
$lineHeight = 0;
while($i < count($words))
{
$currentLine = $words[$i];
if($i+1 >= count($words))
{
$lines[] = $currentLine;
break;
}
//Check to see if we can add another word to this line
$metrics = $image->queryFontMetrics($draw, $currentLine . ' ' . $words[$i+1]);
while($metrics['textWidth'] <= $maxWidth)
{
//If so, do it and keep doing it!
$currentLine .= ' ' . $words[++$i];
if($i+1 >= count($words))
break;
$metrics = $image->queryFontMetrics($draw, $currentLine . ' ' . $words[$i+1]);
}
//We can't add the next word to this line, so loop to the next line
$lines[] = $currentLine;
$i++;
//Finally, update line height
if($metrics['textHeight'] > $lineHeight)
$lineHeight = $metrics['textHeight'];
}
return array($lines, $lineHeight);
}
$text_top = strip_tags(trim($_REQUEST['text_top']));
$text_bottom = strip_tags(trim($_REQUEST['text_bottom']));
$id_base = trim($_REQUEST['id_base']);
/* Création d'un nouvel objet imagick */
$im = new Imagick($_REQUEST['image']);
/* Création d'un nouvel objet imagickdraw */
$draw = new ImagickDraw();
/* Définition de la taille du texte à 52 */
$draw->setFontSize(52);
$draw->setTextAlignment(2);
$draw->setFont("impact.ttf");
$draw->setFillColor('white');
$draw->setStrokeColor("black");
$draw->setStrokeWidth(1);
/* Ajout d'un texte */
//$draw->annotation($im->getImageWidth()/2, 50, $text);
list($lines, $lineHeight) = wordWrapAnnotation($im, $draw, stripslashes($text_top), $im->getImageWidth());
$posY= 50;
for($i = 0; $i < count($lines); $i++){
$draw->annotation($im->getImageWidth()/2, $posY + $i*$lineHeight, $lines[$i]);
}
$im->drawImage($draw);
Montrez votre code complet. Il y a probablement un 'htmlspecialchars()' qui se passe quelque part qui provoque ce –
j'ai édité, j'ai également inclus la fonction que j'utilise pour faire le mot enveloppant sur l'image. –