Aller au contenu

Sujets conseillés

Posté

Salut,

Je cherche à écrire un prix sur une image. J'utilise une police ttf qui contient le caractère euro (Bitstream Vera Sans), et j'ai, comme indiqué dans la doc, encodé mon caractère euro sous son index unicode (donc AC;).

Malgré ça, j'ai toujours un rectangle à la place de ce caractère.

Merci

Posté

Salut,

Vérifies si ton éditeur de code a le même encodage que les pages de ton site. C'est le cas le plus courant ;)

D'ailleurs si tu es en UTF-8 tu n'as rien besoin de coder, tu peux écrire tel quel ton caractère €

Posté

Trouvé !

Sur le site Unicode, le symbole euro est indiqué avec un code numérique 20ac (qui ne passe pas) alors que sur le site W3C il est indiqué avec 8364 (qui passe).

Pourquoi cette différence ? Je ne sais pas. Toujours est-il que mon problème est résolu; si quelqu'un comprend cette énigme, tout savoir est bon à prendre.

Merci :)

  • 2 years later...
Posté
Sur le site Unicode, le symbole euro est indiqué avec un code numérique 20ac (qui ne passe pas) alors que sur le site W3C il est indiqué avec 8364 (qui passe). Pourquoi cette différence ? Je ne sais pas. Toujours est-il que mon problème est résolu; si quelqu'un comprend cette énigme, tout savoir est bon à prendre.

Justement, 20AC n'est pas à proprement parler un «code numérique», mais un code alphanumérique qui représente un nombre en base 16. Pour info, un code hexadécimal doit être représenté sous la forme 0x20AC, pour éviter la confusion (même si dans le cas présent la présence de lettres dans le nombre suffit à mettre la puce à l'oreille).

Résolution tardive de l'énigme soumise par MarvinLeRouge (tout vient à point à qui sait attendre) :

8364 est juste la version décimale de 0x20AC : (12x1)+(10x16)+(0x256)+(2*4096)=12+160+8192=8364 :cool:

Toutefois, confronté au même problème du signe euro avec imagettftext, je n'ai pas trouvé la solution ici (sans doute du fait d'une configuration différente).

Alors, si ça peut aider quelqu'un, je suis parvenu à afficher le signe euro en passant par le code suivant :

$prix="20.50";
$euro=utf8_decode(html_entity_decode('',ENT_NOQUOTES,'UTF-8'));
$prix = preg_replace('/\./',$euro,$prix);
[...]
imagettftext($im,$taillePolice,$angle,$x,$y,$couleur,$police,$prix);

Précision : le fichier php contenant ce code est encodé UTF-8... Et les manipulations de chaînes avec les commandes php sont un peu plus tortueuses (beaucoup d'entre elles n'acceptent pas l'UTF-8)... Contrairement à ce qu'on pourrait penser, le fait d'avoir des pages encodées en UTF-8 ne facilite pas le travail. Un simple $euro="" ne suffit pas (testé sans succès avec plein de polices différentes).

Si votre page est en iso-8859-1, du coup, vous pouvez vous essayer le code suivant :

$prix="20.50";
$euro=chr(128);
$prix = preg_replace('/\./',$euro,$prix);
[...]
imagettftext($im,$taillePolice,$angle,$x,$y,$couleur,$police,$prix);

Je ne garantis pas le fonctionnement dans toutes les configurations, mais ce code fonctionne sur mes serveurs alors qu'un $euro=chr(8364) ne fonctionne pas.

Configs testées :

PHP 5 sous Gentoo et RedHat

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...