OVH Cloud OVH Cloud

caractères différents sous Firefox et IE

24 réponses
Avatar
Y a personne
Bonjour,

lors d'une requête Ajax le code suivant ne fonctionne pas avec IE mais
très bien avec Firefox... comme toujours :


header("Content-type: text/html; charset=iso-8859-1");

$texte = "azerty € ™";

$texte = str_replace("€", "€", $texte);
$texte = str_replace("™", "™", $texte);

print $texte;


le code € et ™ deviennent des petits carrés

merci

10 réponses

1 2 3
Avatar
Pierre Goiffon
Olivier Miakinen wrote:
header("Content-type: text/html; charset=iso-8859-1");
$texte = str_replace("€", "€", $texte);
$texte = str_replace("™", "™", $texte);
à mon idée et bien que je l'affectionne FF a [tort]

il n'y a pas de € dans l'iso-8859-1


Ni de ™. Je sais que Firefox accepte d'afficher ces caractères CP1252
quand on lui annonce de l'ISO-8859-1, mais je croyais justement que
c'était pour être bug-compatible avec Internet Explorer. On m'aurait menti ?


En lisant ton message j'allais répondre que je crois me rappeler que
Firefox agit ainsi si le codage n'est pas présent dans l'entête et
uniquement dans le meta. En lisant le reste du fil (en particulier
<45e9bd0c$0$2946$) ça semble être le cas. Une
rapide recherche Google ne m'a malheureusement rien ramené de probant :(



Avatar
Cenekemoi
[ réponse en windows-1252, comme les deux articles précédents ]


header("Content-type: text/html; charset=iso-8859-1");
$texte = str_replace("&euro;", "€", $texte);
$texte = str_replace("&trade;", "™", $texte);


à mon idée et bien que je l'affectionne FF a [tort]
il n'y a pas de € dans l'iso-8859-1


Ni de ™. Je sais que Firefox accepte d'afficher ces caractères CP1252
quand on lui annonce de l'ISO-8859-1, mais je croyais justement que
c'était pour être bug-compatible avec Internet Explorer. On m'aurait
menti ?

« Y a personne », tu peux te reporter à ma page récemment mise à jour,
<http://www.miakinen.net/vrac/charsets/>, pour vérifier que l'€ est
dans ISO-8859-15, CP1252 et MacRoman, que le ™ est dans CP1252 et
MacRoman,
mais qu'aucun des deux ne figure dans ISO-8859-1.


J'essaie de comprendre...

Imaginons ce code assez simple :

<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-15">
</head>
<body>
signe euro: €
</body>
</html>

Tel que, il m'affiche un point d'interrogation sous FF et un petit carré
sous IE.

Si maintenant, je mets iso-8859-1 à la place de iso-8859-15, ou bien que
carrément (soyons fou) j'enlève la ligne <META...>, le caractère euro
s'affiche correctement sous les deux navigateurs.

Pourrait-on m'éclairer ???

--
Cordialement, Thierry ;-)



Avatar
ASM

J'essaie de comprendre...

Imaginons ce code assez simple :


Si je demande à mon éditeur texte de se mettre en iso-8859-15
---> C'est tout bon chez moi

Si je lui demande de se mettre en Mac Roman
---> Même punition que la tienne.

Voir à voir à bien esspliquer à ton éditeur de code en quoi tu causes ?

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
ASM

J'essaie de comprendre...

Imaginons ce code assez simple :


test fonctionnel en ligne :

http://stephane.moriaux.perso.wanadoo.fr/truc/euro.htm

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
Pierre Goiffon
Cenekemoi wrote:
Imaginons ce code assez simple :

<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-15">
</head>
<body>
signe euro: €
</body>
</html>

Tel que, il m'affiche un point d'interrogation sous FF et un petit carré
sous IE.

Si maintenant, je mets iso-8859-1 à la place de iso-8859-15, ou bien que
carrément (soyons fou) j'enlève la ligne <META...>, le caractère euro
s'affiche correctement sous les deux navigateurs.


Le fichier est sans doute enregistré en windows-1252 par votre
éditeur... Vérifiez quelle est la valeur sélectionnée dans le menu
codage de votre navigateur dans le 2eme cas !

Avatar
ASM

Pourrait-on m'éclairer ???


Il faut savoir que les navigateurs, en l'absence de charset,
font un passage à blanc sur le code et tentent d'analyser en quoi on
peut bien leur causer (ne font pas touj le bon choix ...).

Pour l'iso_8859-1
le € n'y est pas --> hop! au brouteur (moderne) de se dépatouiller ?

Pour l'iso-8859-15
si le € ne s'affiche pas c'est que le fichier n'est pas à ce format.

--
Stephane Moriaux et son (moins) vieux Mac déjà dépassé

Avatar
Pierre Goiffon
Pierre Goiffon wrote:
Cenekemoi wrote:
Imaginons ce code assez simple :

<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-15">
</head>
<body>
signe euro: €
</body>
</html>

Tel que, il m'affiche un point d'interrogation sous FF et un petit
carré sous IE.

Si maintenant, je mets iso-8859-1 à la place de iso-8859-15, ou bien
que carrément (soyons fou) j'enlève la ligne <META...>, le caractère
euro s'affiche correctement sous les deux navigateurs.


Le fichier est sans doute enregistré en windows-1252 par votre
éditeur...


J'ai oublié de préciser que le sigle € fait partie de ISO Latin-9 et
Windows-1252, mais qu'il n'est pas codé de la même manière par l'un ou
l'autre (voir le toujours excellent outil d'Olivier :
http://www.miakinen.net/vrac/charsets/)


Avatar
Olivier Miakinen

J'essaie de comprendre...


Très bien. Essayons ensemble.

Imaginons ce code assez simple :

<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-15">
</head>
<body>
signe euro: ¤
</body>
</html>


Tu n'as pas dit (sans doute parce que tu ne le sais pas) sous quelle
forme est transmis ce « ¤ ». Je m'empresse de préciser qu'avoir écrit
une ligne avec les caractères '<', 'M', 'E', 'T', 'A' et ainsi de suite
est complètement indépendant de cela.

Il y a au moins quatre possibilités :
1) un octet de valeur 128 (si ton fichier est en CP1252)
2) un octet de valeur 164 (si ton fichier est en ISO-8859-15)
3) un octet de valeur 219 (si ton fichier est en MacRoman)
4) trois octets de valeurs respectives 226, 130 et 172 (en UTF-8)

En tout cas ce n'est *pas* ISO-8859-1 puisque ce caractère n'existe pas
dans cette table.

Tel que, il m'affiche un point d'interrogation sous FF et un petit carré
sous IE.


Il faudrait aussi vérifier que la balise META est prise en compte (ce
qui n'est pas le cas si un charset est indiqué dans les entêtes HTTP).
Je vais supposer qu'elle l'est.

Puisque à la fois FF et IE affichent leur propre version du « caractère
inconnu » (point d'interrogation sous FF et carré sous IE), c'est que le
caractère appartient à l'une des zones où ISO-8859-15 n'a rien défini,
donc entre 0 et 31 ou entre 127 et 159. Ce n'est donc pas 164 (tous deux
afficheraient un ¤), ni 219 (ils afficheraient un Û), ni 226+130+172 (FF
afficherait â?¬ et IE afficherait la même chose avec un carré à la place
du point d'interrogation). Sherlock Holmes en déduit que tu as transmis
un octet de valeur 128 et que ton fichier est en CP1252.

Si maintenant, je mets iso-8859-1 à la place de iso-8859-15, ou bien que
carrément (soyons fou) j'enlève la ligne <META...>, le caractère euro
s'affiche correctement sous les deux navigateurs.


C'est que tous deux, sur Windows, font une entorse pour ISO-8859-1 et
traitent cette table comme si c'était du CP1252, ce qui est bien le cas.

Pourrait-on m'éclairer ???


Est-ce que ma réponse, ou celles d'ASM et Pierre Goiffon, t'ont aidé ?

Avatar
Cenekemoi
[...]
Est-ce que ma réponse, ou celles d'ASM et Pierre Goiffon, t'ont aidé ?


Oui, bien sûr, c'est beaucoup plus clair maintenant !

Mais, cela ne m'arrange guère pour les développements que nous faisons.
En effet, développant sous Windows avec Eclipse, cela va nous obliger à
coder le caractère Euro spécifiquement à une autre valeur que ¤. Et
comme les libellés le contenant peuvent se trouver sous une forme Html
ou bien via une alerte Javascript, ce n'est pas simple :
* pour l'Html : mettre "&euro;" (interprèté quelque soit le charset)
* pour alerte Javascript : caractère ¤ si charset "1" et caractère ?
(&curren;) si charset "15"

Enfin, bon, l'étape suivante sera de passer tout en UTF-8, ce sera une
autre partie de plaisir !...

--
Cordialement, Thierry ;-)

Avatar
Pierre Goiffon
Cenekemoi wrote:
développant sous Windows avec Eclipse, cela va nous obliger à
coder le caractère Euro spécifiquement à une autre valeur que €.


Je serai très étonné que Eclipse ne permette pas d'enregistrer ses
fichiers autrement qu'en Windows-1252 ! Après une rapide recherche
Google je suis tombé sur quelqu'un indiquant dans un forum de modifier
le codage des fichiers ainsi :

Window->Preferences->Workbench->Editors-> Text file encoding

1 2 3