Problème pour afficher des caractères spéciaux avec GD
Fermé
polarbird
Messages postés
105
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
16 décembre 2023
-
26 sept. 2017 à 22:51
polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 décembre 2023 - 28 sept. 2017 à 17:25
polarbird Messages postés 105 Date d'inscription vendredi 24 juin 2011 Statut Membre Dernière intervention 16 décembre 2023 - 28 sept. 2017 à 17:25
A voir également:
- Problème pour afficher des caractères spéciaux avec GD
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Caractères spéciaux mac - Guide
- Caractères ascii - Guide
3 réponses
NHenry
Messages postés
15194
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
23 février 2025
353
26 sept. 2017 à 22:57
26 sept. 2017 à 22:57
"é" typique de l'UTF-8 interprété en ISO-*
https://stackoverflow.com/questions/9458317/working-with-gd-imagettftext-and-utf-8-characters
https://stackoverflow.com/questions/9458317/working-with-gd-imagettftext-and-utf-8-characters
jordane45
Messages postés
38446
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 février 2025
4 739
27 sept. 2017 à 07:46
27 sept. 2017 à 07:46
polarbird
Messages postés
105
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
16 décembre 2023
1
27 sept. 2017 à 23:01
27 sept. 2017 à 23:01
Bonjour jordane45,
Merci de ta réponse. J'ai regardé ton lien avec attention et le seul truc qui puisse m'aider est la fonction utf8_encode. Je l'ai appliquée à mon code. J'ai fais quelques modifications depuis hier sur mon code et ça marche déjà mieux.
GD arrive à détecter le bon nombre de caractères que contient ma chaîne. Mais je pense que le problème vient d'ailleurs, c'est-à-dire de ma boucle for. Je reposte mon code amélioré avec lequel j'obtiens toujours des signes comme é.
Merci de ta réponse. J'ai regardé ton lien avec attention et le seul truc qui puisse m'aider est la fonction utf8_encode. Je l'ai appliquée à mon code. J'ai fais quelques modifications depuis hier sur mon code et ça marche déjà mieux.
GD arrive à détecter le bon nombre de caractères que contient ma chaîne. Mais je pense que le problème vient d'ailleurs, c'est-à-dire de ma boucle for. Je reposte mon code amélioré avec lequel j'obtiens toujours des signes comme é.
$mot = utf8_encode('ąćęłńóśźż'); $size = 20; $marge = 15; $font = '../keyboard/NotoSans-Regular.ttf'; $box = imagettfbbox($size, 0, $font, $mot); $largeur = $box[2] - $box[0]; $hauteur = $box[1] - $box[7]; $largeur_lettre = round($largeur/strlen($mot)); $img = imagecreate($largeur+$marge, $hauteur+$marge); $blanc = imagecolorallocate($img, 255, 255, 255); $noir = imagecolorallocate($img, 0, 0, 0); for($i = 0; $i < strlen($mot);++$i) { $l = $mot[$i]; $angle = mt_rand(-35,35); imagettftext($img,$size,$angle,($i*$largeur_lettre)+$marge, $hauteur+mt_rand(0,$marge/2),$noir, $font, $l); } header("Cache-Control: no-cache, must-revalidate"); header('Content-type: image/png'); imagepng($img); imagedestroy($img);
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié le 28 sept. 2017 à 12:21
Modifié le 28 sept. 2017 à 12:21
Bonjour,
Je n'ai pas de moteur php sous la main pour vérifier, mais à mon avis, le problème vient de :
Tu es dans le cadre d'un encodage multi-octet, l'accès par index à un caractère de la chaîne a de forte chance de ne ramener qu'un octet.
Pour contourner ce problème, utilise les fonctions de manipulations de chaînes multi-octets mb_* (mb comme multi-byte).
Par exemple, pour récupérer la longueur de la chaîne, dans ton for :
Et pour récupérer le $i-ème caractère :
Xavier
Je n'ai pas de moteur php sous la main pour vérifier, mais à mon avis, le problème vient de :
$l = $mot[$i];
Tu es dans le cadre d'un encodage multi-octet, l'accès par index à un caractère de la chaîne a de forte chance de ne ramener qu'un octet.
Pour contourner ce problème, utilise les fonctions de manipulations de chaînes multi-octets mb_* (mb comme multi-byte).
Par exemple, pour récupérer la longueur de la chaîne, dans ton for :
for($i = 0; $i < mb_strlen($mot);++$i)
Et pour récupérer le $i-ème caractère :
$l = mb_substr($mot, $i, 1);
Xavier
polarbird
Messages postés
105
Date d'inscription
vendredi 24 juin 2011
Statut
Membre
Dernière intervention
16 décembre 2023
1
28 sept. 2017 à 17:25
28 sept. 2017 à 17:25
Bonjour,
Merci de votre réponse. J'ai essayé la solution que vous proposiez, mais hélas, ce la ne fonctionne toujours pas. J'obtiens toujours le même résultat. En tout cas, vous avez soulevé le bon côté du problème, c'est-à-dire la boucle for, j'espère que quelqu'un saura trouver ce qui cloche.
Cordialement,
polarbird
Merci de votre réponse. J'ai essayé la solution que vous proposiez, mais hélas, ce la ne fonctionne toujours pas. J'obtiens toujours le même résultat. En tout cas, vous avez soulevé le bon côté du problème, c'est-à-dire la boucle for, j'espère que quelqu'un saura trouver ce qui cloche.
Cordialement,
polarbird
26 sept. 2017 à 23:10
Je suis déjà allé sur cette page et ai essayé les solutions qui y étaient proposées mais ça ne marche toujours pas.
Cordialement,
polarbird