Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme avec iconv et imagestring de la librairie gd

2 réponses
Avatar
Jean-Francois Ortolo
Bonjour

D'après le PHP Manual, la chaîne de caractère $string affichée par
l'instruction:

imagestring($image, $font, $x, $y, $string, $color);

est valable à condition que cette chaine $string soit codée en
"Latin2", c'est-à-dire "ISO-8859-2" si je ne me trompe pas.

Or, la chaine $string dont je dispose, est codée au départ en
"ISO-8859-1", et j'obtiens bien des caractères bizarre vaguement
orientaux, quand il y a un e accent grave ( è ) dans la chaine $string ,
sans conversion par iconv.

Le PHP Manual recommande donc, de convertir $string avec la fonction
iconv(), et un exemple est donné par les Américains qui laissent des
commentaires, avec cette fonction: $text = iconv("ISO-8859-1", "Latin2",
$string);

( Avec un autre jeu de codage en input que "ISO-8859-1" , mais celà
revient au même. )

Or, quand je soumet la variable $string à cette instruction, le texte
en sortie est la chaîne vide...

Même chose avec:

$text = iconv("ISO-8859-1", "ISO-8859-2", $string);

Quel que soit le contenu de $string, la variable $text n'affiche rien
sur l'image, qui par ailleurs s'affiche bien..

J'ajoute, que je donne la valeur 3 à la variable $font lors de
l'appel à imagestring($image, $font, $x, $y, $text, $color);

D'où ma question, peut-être plus générale:

Comment avec imagestring(), afficher du texte codé en "ISO-8859-1"
avec les accents, alors que imagestring() suppose que la chaîne devant
s'afficher, est en "Latin2" ?

Merci beaucoup de vos réponses.

Bien à vous.

Amicalement.

Jean-François Ortolo


--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr/

2 réponses

Avatar
Olivier Miakinen
Bonjour Jean-François,

Le 27/10/2008 09:26, Jean-Francois Ortolo a écrit :

D'après le PHP Manual, la chaîne de caractère $string affichée par
l'instruction:

imagestring($image, $font, $x, $y, $string, $color);

est valable à condition que cette chaine $string soit codée en
"Latin2", c'est-à-dire "ISO-8859-2" si je ne me trompe pas.

Or, la chaine $string dont je dispose, est codée au départ en
"ISO-8859-1", et j'obtiens bien des caractères bizarre vaguement
orientaux, quand il y a un e accent grave ( è ) dans la chaine $string ,
sans conversion par iconv.



En effet, dans Latin2, à la place du è tu as un c avec caron (sorte
d'accent circonflexe à l'envers) :
http://alis.isoc.org/codage/iso8859/jeuxiso.htm

Le PHP Manual recommande donc, de convertir $string avec la fonction
iconv(), et un exemple est donné par les Américains qui laissent des
commentaires, avec cette fonction: $text = iconv("ISO-8859-1", "Latin2",
$string);



La conversion échouera au premier caractère inexistant dans Latin2 (le è
en est un exemple). Tu peux tenter une conversion approximative :
$text = iconv("ISO-8859-1", "Latin2//TRANSLIT", $string);
mais le è devrait alors perdre son accent.

Or, quand je soumet la variable $string à cette instruction, le texte
en sortie est la chaîne vide...



Normal si le premier caractère est un è, un à, un ê, etc.

Même chose avec:

$text = iconv("ISO-8859-1", "ISO-8859-2", $string);



Normal, c'est exactement la même chose.

D'où ma question, peut-être plus générale:

Comment avec imagestring(), afficher du texte codé en "ISO-8859-1"
avec les accents, alors que imagestring() suppose que la chaîne devant
s'afficher, est en "Latin2" ?



Tu devrais pouvoir y arriver en utilisant une police TrueType ainsi
qu'il est dit ici : http://fr.php.net/imagestring#71038

<cit.>
The built-in fonts used to be in latin-2 (iso8859-2) encoding. For some
time, they are in latin-1 (iso8859-1) encoding. There is no way to
change the encoding at all. If you need to use any other encoding, you
have to use TrueType fonts.
</cit.>

Voir donc http://fr.php.net/manual/en/function.imagettftext.php
Avatar
Jean-Francois Ortolo
Bonjour Monsieur

Je renonce donc à l'idée de représenter des è sur l'image...

Je me contenterai de e sans accent.

Je vais rajouter "//TRANSLIT" au jeu de code en output.

merci beaucoup de votre aide. ;)

Bien à vous.

Amicalement.

Jean-François Ortolo

--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr/