OVH Cloud OVH Cloud

Caractère €

10 réponses
Avatar
Y a personne
Bonjour,

J'ai une application js/php/Mysql - 100% Ajax

Tous les formulaires sont récupérer par une fonction qui convertit tout
les caractères avec la fonction encodeURIComponent() et envoie coté
serveur en Ajax post.

Coté serveur, php renvoie le texte correctement (avec entêtes iso-8859-1
et décodages utf8). Mais bizarrement le seul caractère qui foire est le
caractère €.

quid ?

10 réponses

Avatar
Mr Prout !
Y a personne nous a pondu :
Bonjour,

J'ai une application js/php/Mysql - 100% Ajax

Tous les formulaires sont récupérer par une fonction qui convertit tout
les caractères avec la fonction encodeURIComponent() et envoie coté
serveur en Ajax post.

Coté serveur, php renvoie le texte correctement (avec entêtes iso-8859-1
et décodages utf8). Mais bizarrement le seul caractère qui foire est le
caractère €.


Et si tu essaies avec iso-8859-15 ??
^

Mr Prout !

Avatar
Y a personne
Y a personne nous a pondu :
Bonjour,

J'ai une application js/php/Mysql - 100% Ajax

Tous les formulaires sont récupérer par une fonction qui convertit
tout les caractères avec la fonction encodeURIComponent() et envoie
coté serveur en Ajax post.

Coté serveur, php renvoie le texte correctement (avec entêtes
iso-8859-1 et décodages utf8). Mais bizarrement le seul caractère qui
foire est le caractère €.


Et si tu essaies avec iso-8859-15 ??
^

Mr Prout !



Après avoir fait des test toutes l'après midi...
j'ai trouvé une solution.

Le problème est que coté serveur j'avais un truc du genre

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

foreach($_REQUEST as $champs => $val)
{
$a=$champs;
$$a­dslashes(utf8_decode(trim($val)));
}

modifier par

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

foreach($_REQUEST as $champs => $val)
{
$a=$champs;
$$a­dslashes(utf8_decode(trim(str_replace("€", "€", $val))));
}

Ainsi, le € s'enregistre en dur dans MySQL, et peut réapparaître en dur.
€ est le résultat de € modifier par encodeURIComponent() --> Ajax POST
--> header("Content-type: text/html; charset=iso-8859-1");

Si tu as plus simple, je suis preneur, merci


Avatar
Olivier Miakinen

Coté serveur, php renvoie le texte correctement (avec entêtes iso-8859-1
et décodages utf8). Mais bizarrement le seul caractère qui foire est le
caractère ¤.


En iso-8859-1 ? Pas étonnant : il n'en fait pas partie. D'ailleurs ton
nouvelleur est obligé de passer en windows-1252 pour l'inclure dans ton
article. Pour ta page web, il te faut soit tout passer en utf-8, soit
convertir « ¤ » en « € » ou toute autre entité équivalente.

Avatar
Olivier Miakinen

Après avoir fait des test toutes l'après midi...
j'ai trouvé une solution.


Ce n'est pas une solution, c'est un bug. Il se trouve que certains
navigateurs sur Windows sont « sympas » (hum) et te laissent croire que
ça marche alors qu'il n'en est rien (oui, même Mozilla et Firefox).

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


Donc aucun caractère € n'est possible en dur.

$$a­dslashes(utf8_decode(trim(str_replace("€", "€", $val))));


Je suppose que ton programme PHP est sauvegardé en windows-1252, avec
donc un caractère 128 stocké à la place de l'€. Ça semble marcher si
tu utilises un navigateur qui transforme silencieusement l'iso-8859-1
en windows-1252 pour les caractères 128 à 159, mais certains de tes
visiteurs auront un caractère de remplacement ou rien du tout là où
toi tu vois un euro. Et bien sûr ta page n'est pas valide.

Si tu as plus simple, je suis preneur, merci


$$a­dslashes(utf8_decode(trim(str_replace("€", "€", $val))));

Avatar
Y a personne
Après avoir fait des test toutes l'après midi...
j'ai trouvé une solution.


Ce n'est pas une solution, c'est un bug. Il se trouve que certains
navigateurs sur Windows sont « sympas » (hum) et te laissent croire que
ça marche alors qu'il n'en est rien (oui, même Mozilla et Firefox).

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


Donc aucun caractère € n'est possible en dur.

$$a­dslashes(utf8_decode(trim(str_replace("€", "€", $val))));


Je suppose que ton programme PHP est sauvegardé en windows-1252, avec
donc un caractère 128 stocké à la place de l'€. Ça semble marcher si
tu utilises un navigateur qui transforme silencieusement l'iso-8859-1
en windows-1252 pour les caractères 128 à 159, mais certains de tes
visiteurs auront un caractère de remplacement ou rien du tout là où
toi tu vois un euro. Et bien sûr ta page n'est pas valide.

Si tu as plus simple, je suis preneur, merci


$$a­dslashes(utf8_decode(trim(str_replace("€", "€", $val))));


oui, je ne suis pas un pro de la gestion des caractères.
Mais je suis un peu maniaque. Je voudrais le caractère € mémoriser en
dur dans MySQL (question de portabilité pour les exports et autre)

Je sais que ma solution n'est pas très pro, et je n'aime pas le fait que
je doive tester tout les input (Il peut y avoir d'autre caractères que
le €). Mon programme ne fonctionne que ss Firefox et comporte plus de
110 <form>. Mais certaines fonction doive effectivement fonctionner
correctement dans divers sites (donc sous IE... et autre OS).

Si je sauvegarde &euro; dans la BD, je dois donc faire 2 remplacements.
Mais à mon avis c'est la meilleur solution.

merci


Avatar
Olivier Miakinen

[...] (Il peut y avoir d'autre caractères que le €).


Notamment le œ qui n'appartient pas à iso-8859-1 non plus, et tant
d'autres. La solution la plus universelle serait UTF-8, mais je
comprends que tu recules si tu as déjà plus de 110 formulaires en
Latin1.

Bonne chance,
--
Olivier Miakinen

Avatar
Y a personne
[...] (Il peut y avoir d'autre caractères que le €).


Notamment le œ qui n'appartient pas à iso-8859-1 non plus, et tant
d'autres. La solution la plus universelle serait UTF-8, mais je
comprends que tu recules si tu as déjà plus de 110 formulaires en
Latin1.

Bonne chance,



J'ai tout essayer !

Un fichier UTF-8 avec
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

et une bd MySQL UTF8
et impossible de sauvegarder le caractère € en dur sans remplacement

quid ?


Avatar
Pierre Goiffon
Y a personne wrote:
J'ai tout essayer !

Un fichier UTF-8 avec
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

et une bd MySQL UTF8
et impossible de sauvegarder le caractère € en dur sans remplacement


Pour que ça fonctionne il faut :
- que vos pages soient envoyées en indiquant le codage utilisé (dans
l'entête http en priorité, le meta peut être oublié)
- que votre connexion à la base de données soit effectuée dans le bon
codage (sous Mysql voir set names)
- que la collation de votre base permette le stockage du caractère (si
j'ai bonne mémoire les doc mysql parlent d'interclassement)

Avatar
Y a personne
Y a personne wrote:
J'ai tout essayer !

Un fichier UTF-8 avec
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

et une bd MySQL UTF8
et impossible de sauvegarder le caractère € en dur sans remplacement


Pour que ça fonctionne il faut :
- que vos pages soient envoyées en indiquant le codage utilisé (dans
l'entête http en priorité, le meta peut être oublié)
- que votre connexion à la base de données soit effectuée dans le bon
codage (sous Mysql voir set names)
- que la collation de votre base permette le stockage du caractère (si
j'ai bonne mémoire les doc mysql parlent d'interclassement)


merci

après 2 nuits blanche, j'ai compris qu'il suffisait de mettre
mysql_query("SET NAMES 'utf8'"); et tout était réglé....

on peut donc laisser ses fichiers et sa bd en ISO....


merci


Avatar
Pierre Goiffon
Y a personne wrote:
Pour que ça fonctionne il faut :
- que vos pages soient envoyées en indiquant le codage utilisé (dans
l'entête http en priorité, le meta peut être oublié)
- que votre connexion à la base de données soit effectuée dans le bon
codage (sous Mysql voir set names)
- que la collation de votre base permette le stockage du caractère (si
j'ai bonne mémoire les doc mysql parlent d'interclassement)


après 2 nuits blanche, j'ai compris qu'il suffisait de mettre
mysql_query("SET NAMES 'utf8'"); et tout était réglé....


Voilà qui règle le 2eme point parmis ceux que je citais

on peut donc laisser ses fichiers et sa bd en ISO....


Cette dernière phrase m'inquiète...