Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > Imagick
Imagick Forum d'entraide pour l'extension Imagick permettant de manipuler des images en PHP (port de l'API ImageMagick).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2007, 17h32   #1
Invité de passage
 
Inscription : juin 2007
Messages : 15
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 15
Points : 3
Points : 3
Par défaut [ImageMagick] Création d'image avec des apostrophes

Bonjour,

Je créé des images textes avec un contenu dynamique provenant d'une base de donnée.
J'ai un soucis sur une toute petite chose : lorsque j'ai des textes avec des apostrophes (par exemple, La Pousse d'Or) ce m'affiche tout ,sauf ce que j'ai à droite de l'apostrophe (sur mon exemple, cela m'affiche : La Pousse d).
J'ai inséré dans ma base de donnée mon texte grace à un addslashes() et essaye de reprendre mon texte dans mon image grace à un stripslashes() mais cela ne change rien.

Si vous aviez une solution à me proposer au cas où vous avez déjà rencontrer la même problème ...

Gracieusement, merci pour vos futures réponses ...

Adaviada
Adaviada est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 15h28   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il nous faudrait plus d'éléments pour nous-même comprendre : notamment la forme des données au fur et à mesure des traitements qui leur sont effectués (comment se présente "La Pousse d'Or" avant insertion, après insertion ou à sa récupération) et le code (GD) en question.

Note : vous ne devriez plus utiliser addslashes mais mysql_real_escape_string pour protéger les données à destination de MySQL !
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 09h52   #3
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Pour de plus amples informations : Comment se protéger des failles d'injection ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 14h31   #4
Invité de passage
 
Inscription : juin 2007
Messages : 15
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 15
Points : 3
Points : 3
Bonjour,

Malheureusement j'ai bien essayé de comprendre de quoi vous me parler mais j'ai un peu de mal à vous suivre, notamement sur ce à quoi sert la fonction mysql_real_escape_string().

Alors en fait, j'insère pour l'instant directement dans ma base de donnée via mon PHPMyAdmin mais je risque d'insérer mes données via un formulaire d'ici peu.

L'affichage sur ma page de mon image-texte se fait de cette facon :
1/ je fais une requète qui me permet de récupérer les données dont j'ai besoin (en l'occurence le texte que je souhaite mettre dans mon image).
2/ j'appelle mon image de cette facon :
Code :
1
2
3
 
$titre = $data2->nom_domaine;
echo "<img src='titre2.php?titre=".stripslashes($titre)."'>";
3/ voici le code de mon fichier qui créé mon image :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?php
// Denition du content-type
header("Content-type: image/png");
 
// Creation de l'image
$im = imagecreate(240, 15);
 
// Creation de quelques couleurs
$beige = imagecolorallocate($im, 247, 244, 233);
$marron = imagecolorallocate($im, 54, 41, 16);
 
//Fond transparent
imageColorTransparent($im, $beige);
 
// Le texte dessiner
function remplace($str)
{
return strtr($str, array('\''=>'&rsquo;','&'=>'&amp;','<'=>'&lt;','>'=>'&gt;','\"'=>'"','\\'=>' '));
}
 
$text = remplace($_GET['titre']);
// Remplacez le chemin par votre propre chemin de police
$font = 'London.ttf';
 
// Ajout du texte
imagettftext($im, 14, 0, 0, 15, $marron, $font, $text);
 
// Utiliser imagepng() donnera un texte plus claire, 
// comparer à l'utilisation de la fonction imagejpeg()
imagepng($im);
imagedestroy($im);
?>
Ce fonctionnement fonctionne seulement si je n'ai pas de caractère spéciaux du type d'une apostrophe comme dans l'exemple que j'ai donné plus haut avec "La pousse d'or" qui ne m'affiche que "La pouss d".

Est-ce que j'ai été plus clair ??
Je n'ai toujours pas trouvé de solution ...
Adaviada est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2007, 15h39   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Est-ce mieux avec :
Code :
echo "<img src='titre2.php?titre=".urlencode(stripslashes($titre))."'>";
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 11h09   #6
Invité de passage
 
Inscription : juin 2007
Messages : 15
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 15
Points : 3
Points : 3
Merci pour ta réponse et ton aide,

Je ne sais pas si c'est mieux ... cela m'affiche "Pousse d\'Or" ... j'ai un slash en trop ... comment pourrais-je l'enlevé ??
Adaviada est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2007, 12h04   #7
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
En reprenant ton code, ceci fonctionne parfaitement :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
 
$im = imagecreate(240, 15);
 
$beige = imagecolorallocate($im, 247, 244, 233);
$marron = imagecolorallocate($im, 54, 41, 16);
 
imageColorTransparent($im, $beige);
 
if(!empty($_GET['text']))
{
    $text = $_GET['text'];
}
else
{
    $text = 'La pousse d\'or';
}
 
$font = 'Arial.ttf';
 
imagettftext($im, 14, 0, 0, 15, $marron, $font, $text);
 
header("Content-type: image/png");
 
imagepng($im);
imagedestroy($im);
 
?>
Il n'y a pas besoin de fonction remplace()
Par contre, il faudrait vérifier si cela ne pose pas de problème de sécurité d'insérer du texte utilisateur dans une image. Il me semble qu'une faille a été découverte il y a très peu de temps, justement...
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2007, 09h27   #8
Invité de passage
 
Inscription : juin 2007
Messages : 15
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : juin 2007
Messages : 15
Points : 3
Points : 3
J'ai justement suprimé la fonction remplace() dans le code dont je me suis servie ... il faut donc que dans ma base le champs soit celui-ci : La Pousse d\'Or ??? parce que sinon de mon coté j'ai tjr le slash qi s'affiche dans mon image ...

Sinon je n'y connais rien en sécurité .. je ne comprend même pas de quoi tu me parles
Adaviada est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2007, 11h18   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
La fonction stripslahes devrait les supprimer (à appliquer aussi à la réception) Je suppose que si vous en avez, c'est le fruit de la fonctionnalité magic_quotes_gpc qui est active (voir votre phpinfo).

Dans votre base de données vous ne devriez pas avoir "La Pousse d\'Or" mais "La Pousse d'Or". L'échappement ne doit être présent que dans la requête pour faire passer les caractères spéciaux, ils n'apparaissent plus après dans vos données.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2007, 12h35   #10
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
J'ai un \ dans mon exemple car j'utilise des apostrophes et non des guillemets.
cf. Apostrophes ou guillemets, lesquels choisir ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h04.


 
 
 
 
Partenaires

Hébergement Web