Je galère depuis quelques jours sur un problème, et j'ai rien trouvé
d'intéressant sur Google que se soit sur le web ou dans les newsgroups.
Je génère un fichier XML encodé en utf-8, pour encoder les textes rentrées
j'y vais à coup de utf8_encode(htmlspecialchars($texte)) pour être conforme
à la fois à XML et au paramètre d'entrée de utf8_encode (utf8_encode
convertit de iso-8859-1 en utf-8).
Jusque là pas de problème avec la grande majorités des caractères
(&<>éèà...) mais je me suis aperçu : qu'avec celui-ci par exemple : right
single quote mark 92 ’ ’ --> '
Ni htmlspecialchars ou htmlentities et ni utf8_encode l'encode du coup je me
retrouve avec un document XML non valide !
J'aimerais savoir qu'elle est la meilleur stratégie à adopter à votre avis,
pour l'instant je fais un str_replace mais la solution me convient pas car
j'imagine que le problème peu se reposer avec d'autre caractère. Qu'elles
sont les caractères à problème et existe t-il une solution propre pour y
remédier ?
PS : v. PHP 4.3.2
D'avance un grand merci pour votre aide,
Séb
-- carpe diem --
Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne
savait pas et qu'il l'a fait. Marcel Pagnol.
Ce qui me surprend, c'est que tu aies besoin de coder en utf-8 spécifiquement les caractères windows.
Je suppose que ta page, si elle contient un euro microsoft, doit contenir aussi au moins un e avec accent aigu ou un a avec accent grave. Donc, si tu dois traduire toi-même le 80 (¤ win-1252) en E2 82 AC (¤ utf-8), alors tu dois aussi traduire le E9 (é iso-8859-1 ou win-1252) en C3 A9 (é utf-8). Me trompé-je ?
Tu as tout a fait raison. j'ai fait un client mail et le blème c'est lorsque je recois un mail qui provient de outlook que j'ai quelques soucis.
pour etre franc je sais encore pas trop comment je vais faire, parce que je ne peux par remplacer les caractères avant l'encodage UTF-8. ni apres d'ailleurs.
donc la solution est de ce faire sa propre routine de conversion UTF-8. ou de trouver quelques chose qui convertierai correctement
ici http://www.php.net/manual/fr/function.utf8-encode.php si tu cherches "code2utf", tu trouveras une contrib d'un gars qui a écrit une fonction qui convertit en utf-8.
donc oui, pour répondre a ta question. va falloir que j'ecrive une fonction win-1252 => utf-8 qui sera identique a iso-8859-1 => utf-8 sauf si tu as mieux a me proposer...
voila Etienne
Ce qui me surprend, c'est que tu aies besoin de coder en utf-8
spécifiquement les caractères windows.
Je suppose que ta page, si elle contient un euro microsoft, doit
contenir aussi au moins un e avec accent aigu ou un a avec accent grave.
Donc, si tu dois traduire toi-même le 80 (¤ win-1252) en E2 82 AC (¤
utf-8), alors tu dois aussi traduire le E9 (é iso-8859-1 ou win-1252) en
C3 A9 (é utf-8). Me trompé-je ?
Tu as tout a fait raison.
j'ai fait un client mail et le blème c'est lorsque je recois un mail qui
provient de outlook que j'ai quelques soucis.
pour etre franc je sais encore pas trop comment je vais faire,
parce que je ne peux par remplacer les caractères avant l'encodage UTF-8.
ni apres d'ailleurs.
donc la solution est de ce faire sa propre routine de conversion UTF-8.
ou de trouver quelques chose qui convertierai correctement
ici
http://www.php.net/manual/fr/function.utf8-encode.php
si tu cherches "code2utf",
tu trouveras une contrib d'un gars qui a écrit une fonction qui convertit en
utf-8.
donc oui, pour répondre a ta question. va falloir que j'ecrive une fonction
win-1252 => utf-8
qui sera identique a iso-8859-1 => utf-8
sauf si tu as mieux a me proposer...
Ce qui me surprend, c'est que tu aies besoin de coder en utf-8 spécifiquement les caractères windows.
Je suppose que ta page, si elle contient un euro microsoft, doit contenir aussi au moins un e avec accent aigu ou un a avec accent grave. Donc, si tu dois traduire toi-même le 80 (¤ win-1252) en E2 82 AC (¤ utf-8), alors tu dois aussi traduire le E9 (é iso-8859-1 ou win-1252) en C3 A9 (é utf-8). Me trompé-je ?
Tu as tout a fait raison. j'ai fait un client mail et le blème c'est lorsque je recois un mail qui provient de outlook que j'ai quelques soucis.
pour etre franc je sais encore pas trop comment je vais faire, parce que je ne peux par remplacer les caractères avant l'encodage UTF-8. ni apres d'ailleurs.
donc la solution est de ce faire sa propre routine de conversion UTF-8. ou de trouver quelques chose qui convertierai correctement
ici http://www.php.net/manual/fr/function.utf8-encode.php si tu cherches "code2utf", tu trouveras une contrib d'un gars qui a écrit une fonction qui convertit en utf-8.
donc oui, pour répondre a ta question. va falloir que j'ecrive une fonction win-1252 => utf-8 qui sera identique a iso-8859-1 => utf-8 sauf si tu as mieux a me proposer...
voila Etienne
Olivier Miakinen
J'ai essayé avec "Windows-1252" ou avec "CP1252" : utf8_encode(iconv("Windows-1252", "ISO-8859-1", htmlspecialchars($txt))).
La transformation d'un caractère spécifique à Windows-1252 n'a aucune chance de fonctionner si tu essayes de l'encoder dans un charset qui ne le contient pas (ISO-8859-1, par exemple).
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8", htmlspecialchars($txt))
Oui, ce serait l'idéal.
Comment faire pour encoder de manière "automatique" en utf-8 un questionnaire par un utilisateur quelque soit le charset qu'il utilise ?
La première chose, c'est de savoir *vraiment* ce que tu récupères. Fais des essais avec une boucle qui t'affiche ord($carac) pour chaque caractère de la chaîne, avec des exemples simples (un "é" ou un "¤").
J'ai essayé avec "Windows-1252" ou avec "CP1252" :
utf8_encode(iconv("Windows-1252", "ISO-8859-1", htmlspecialchars($txt))).
La transformation d'un caractère spécifique à Windows-1252 n'a aucune
chance de fonctionner si tu essayes de l'encoder dans un charset qui ne
le contient pas (ISO-8859-1, par exemple).
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8",
htmlspecialchars($txt))
Oui, ce serait l'idéal.
Comment faire pour encoder de manière "automatique" en utf-8 un
questionnaire par un utilisateur quelque soit le charset qu'il utilise ?
La première chose, c'est de savoir *vraiment* ce que tu récupères. Fais
des essais avec une boucle qui t'affiche ord($carac) pour chaque
caractère de la chaîne, avec des exemples simples (un "é" ou un "¤").
J'ai essayé avec "Windows-1252" ou avec "CP1252" : utf8_encode(iconv("Windows-1252", "ISO-8859-1", htmlspecialchars($txt))).
La transformation d'un caractère spécifique à Windows-1252 n'a aucune chance de fonctionner si tu essayes de l'encoder dans un charset qui ne le contient pas (ISO-8859-1, par exemple).
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8", htmlspecialchars($txt))
Oui, ce serait l'idéal.
Comment faire pour encoder de manière "automatique" en utf-8 un questionnaire par un utilisateur quelque soit le charset qu'il utilise ?
La première chose, c'est de savoir *vraiment* ce que tu récupères. Fais des essais avec une boucle qui t'affiche ord($carac) pour chaque caractère de la chaîne, avec des exemples simples (un "é" ou un "¤").
Seb
J'ai essayé avec "Windows-1252" ou avec "CP1252" : utf8_encode(iconv("Windows-1252", "ISO-8859-1", htmlspecialchars($txt))).
La transformation d'un caractère spécifique à Windows-1252 n'a aucune chance de fonctionner si tu essayes de l'encoder dans un charset qui ne le contient pas (ISO-8859-1, par exemple).
Oui, effectivement, c'est la moindre des choses mais je l'oublie !!
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8", htmlspecialchars($txt))
Oui, ce serait l'idéal.
Comment faire pour encoder de manière "automatique" en utf-8 un questionnaire par un utilisateur quelque soit le charset qu'il utilise ?
La première chose, c'est de savoir *vraiment* ce que tu récupères. Fais des essais avec une boucle qui t'affiche ord($carac) pour chaque caractère de la chaîne, avec des exemples simples (un "é" ou un "¤").
D'accord merci, j'ai fais quelques tests je vois la démarche :)
Je te remercie très sincèrement pour toutes des explications, ça ma bien aiguiller ;)
Séb
J'ai essayé avec "Windows-1252" ou avec "CP1252" :
utf8_encode(iconv("Windows-1252", "ISO-8859-1",
htmlspecialchars($txt))).
La transformation d'un caractère spécifique à Windows-1252 n'a aucune
chance de fonctionner si tu essayes de l'encoder dans un charset qui ne
le contient pas (ISO-8859-1, par exemple).
Oui, effectivement, c'est la moindre des choses mais je l'oublie !!
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8",
htmlspecialchars($txt))
Oui, ce serait l'idéal.
Comment faire pour encoder de manière "automatique" en utf-8 un
questionnaire par un utilisateur quelque soit le charset qu'il utilise ?
La première chose, c'est de savoir *vraiment* ce que tu récupères. Fais
des essais avec une boucle qui t'affiche ord($carac) pour chaque
caractère de la chaîne, avec des exemples simples (un "é" ou un "¤").
D'accord merci, j'ai fais quelques tests je vois la démarche :)
Je te remercie très sincèrement pour toutes des explications, ça ma bien
aiguiller ;)
J'ai essayé avec "Windows-1252" ou avec "CP1252" : utf8_encode(iconv("Windows-1252", "ISO-8859-1", htmlspecialchars($txt))).
La transformation d'un caractère spécifique à Windows-1252 n'a aucune chance de fonctionner si tu essayes de l'encoder dans un charset qui ne le contient pas (ISO-8859-1, par exemple).
Oui, effectivement, c'est la moindre des choses mais je l'oublie !!
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8", htmlspecialchars($txt))
Oui, ce serait l'idéal.
Comment faire pour encoder de manière "automatique" en utf-8 un questionnaire par un utilisateur quelque soit le charset qu'il utilise ?
La première chose, c'est de savoir *vraiment* ce que tu récupères. Fais des essais avec une boucle qui t'affiche ord($carac) pour chaque caractère de la chaîne, avec des exemples simples (un "é" ou un "¤").
D'accord merci, j'ai fais quelques tests je vois la démarche :)
Je te remercie très sincèrement pour toutes des explications, ça ma bien aiguiller ;)
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8", htmlspecialchars($txt)) Malheureusement le fonctionnement de mb_http_input() semble assez peu fiable.
Il suffit de demander au navigateur d'envoyer les données en UTF-8 directement, ce serait plus simple non ?
Seb wrote:
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8",
htmlspecialchars($txt))
Malheureusement le fonctionnement de mb_http_input() semble assez peu
fiable.
Il suffit de demander au navigateur d'envoyer les données en UTF-8
directement, ce serait plus simple non ?
Mon rêve aurait été de faire un : iconv(mb_http_input(), "UTF-8", htmlspecialchars($txt)) Malheureusement le fonctionnement de mb_http_input() semble assez peu fiable.
Il suffit de demander au navigateur d'envoyer les données en UTF-8 directement, ce serait plus simple non ?
Etienne SOBOLE
"loufoque" a écrit dans le message de news: c8fh86$p4s$
iconv.
et bien il me semblait avoir essayé cette methode, mais me rappelait pas qu'elle marchat. je vais rester...
Etienne
"loufoque" <mat.wilmots@wanadoo.fr> a écrit dans le message de news:
c8fh86$p4s$1@news-reader1.wanadoo.fr...
iconv.
et bien il me semblait avoir essayé cette methode, mais me rappelait pas
qu'elle marchat.
je vais rester...
"loufoque" a écrit dans le message de news: c8fh86$p4s$
iconv.
et bien il me semblait avoir essayé cette methode, mais me rappelait pas qu'elle marchat. je vais rester...
Etienne
Etienne SOBOLE
"loufoque" a écrit dans le message de news: c8fh86$p4s$
iconv.
ouaip c'est vrai que ca marche. c'est vrai qu'a l'epoque ou j'avais testé, j'avais pas compris qu'on pouvait recevoir des mail avec un encodage ISO-8859-1 alors qu'en fait c'est un Windows-1252...
arf... tout ce temps perdu...
"loufoque" <mat.wilmots@wanadoo.fr> a écrit dans le message de news:
c8fh86$p4s$1@news-reader1.wanadoo.fr...
iconv.
ouaip c'est vrai que ca marche.
c'est vrai qu'a l'epoque ou j'avais testé, j'avais pas compris qu'on pouvait
recevoir des mail avec un encodage ISO-8859-1 alors qu'en fait c'est un
Windows-1252...
"loufoque" a écrit dans le message de news: c8fh86$p4s$
iconv.
ouaip c'est vrai que ca marche. c'est vrai qu'a l'epoque ou j'avais testé, j'avais pas compris qu'on pouvait recevoir des mail avec un encodage ISO-8859-1 alors qu'en fait c'est un Windows-1252...
arf... tout ce temps perdu...
Seb
Il suffit de demander au navigateur d'envoyer les données en UTF-8 directement, ce serait plus simple non ?
Comment fais tu pour demander au navigateur depuis une requête serveur qu'il te renvoie les données automatiquement en UTF-8 ? En plus même si c'était faisable rien n'empêche l'utilisateur de changer l'encodage à la main !
Séb
Il suffit de demander au navigateur d'envoyer les données en UTF-8
directement, ce serait plus simple non ?
Comment fais tu pour demander au navigateur depuis une requête serveur qu'il
te renvoie les données automatiquement en UTF-8 ? En plus même si c'était
faisable rien n'empêche l'utilisateur de changer l'encodage à la main !
Il suffit de demander au navigateur d'envoyer les données en UTF-8 directement, ce serait plus simple non ?
Comment fais tu pour demander au navigateur depuis une requête serveur qu'il te renvoie les données automatiquement en UTF-8 ? En plus même si c'était faisable rien n'empêche l'utilisateur de changer l'encodage à la main !
Séb
Bobe
Seb nous a dit le 19/05/2004 22:19:
Il suffit de demander au navigateur d'envoyer les données en UTF-8 directement, ce serait plus simple non ?
Comment fais tu pour demander au navigateur depuis une requête serveur qu'il te renvoie les données automatiquement en UTF-8 ?
Soit la page elle même est en UTF-8 et dans ce cas, le navigateur devrait envoyer les données encodées en UTF-8, soit tu indiques l'encodage dans lequel le navigateur doit envoyer les données. Par exemple, pour un formulaire html:
Mais cette solution est à éviter pour l'instant car peu de navigateurs tiennent compte de l'attribut accept-charset.
En plus même si c'était faisable rien n'empêche l'utilisateur de changer l'encodage à la main !
Cela modifierait l'encodage en ce qui concerne ce qui est affiché mais peut être pas en ce qui concerne les données envoyées. Faudrait tester...
Sinon, peut être que le navigateur précise l'encodage des données dans le champs content-type mais j'ai des doutes.
-- Bobe (Aurélien Maille) http://webnaute.net
"la vie d'un geek est un combat perpétuel contre l'imperfection"
Seb nous a dit le 19/05/2004 22:19:
Il suffit de demander au navigateur d'envoyer les données en UTF-8
directement, ce serait plus simple non ?
Comment fais tu pour demander au navigateur depuis une requête serveur qu'il
te renvoie les données automatiquement en UTF-8 ?
Soit la page elle même est en UTF-8 et dans ce cas, le navigateur devrait
envoyer les données encodées en UTF-8, soit tu indiques l'encodage dans lequel
le navigateur doit envoyer les données.
Par exemple, pour un formulaire html:
Il suffit de demander au navigateur d'envoyer les données en UTF-8 directement, ce serait plus simple non ?
Comment fais tu pour demander au navigateur depuis une requête serveur qu'il te renvoie les données automatiquement en UTF-8 ?
Soit la page elle même est en UTF-8 et dans ce cas, le navigateur devrait envoyer les données encodées en UTF-8, soit tu indiques l'encodage dans lequel le navigateur doit envoyer les données. Par exemple, pour un formulaire html:
Mais cette solution est à éviter pour l'instant car peu de navigateurs tiennent compte de l'attribut accept-charset.
En plus même si c'était faisable rien n'empêche l'utilisateur de changer l'encodage à la main !
Cela modifierait l'encodage en ce qui concerne ce qui est affiché mais peut être pas en ce qui concerne les données envoyées. Faudrait tester...
Sinon, peut être que le navigateur précise l'encodage des données dans le champs content-type mais j'ai des doutes.
-- Bobe (Aurélien Maille) http://webnaute.net
"la vie d'un geek est un combat perpétuel contre l'imperfection"
Bobe
J.J.SOLARI nous a dit le 16/05/2004 23:07:
Le problème résidait (plutôt, réside toujours) principalement, comme il me semble que c'est ton cas, dans l'incompatibilité entre les jeux de caractères win-1252 (et d'autres win-xxxx) avec iso-8859-1.
Je m'en étais sorti en mappant chacun des caractères du jeu cp-1252 situés dans la zone réservée (selon iso-8859-1) par leur équivalent Unicode. Voici ce que ça donnait :
Quelle était la provenance des données ?
Car dans le cas d'un formulaire html par exemple, et si le charset de la page est ISO-8859-1, le navigateur devrait théoriquement envoyer les données sous le charset ISO-8859-1 non ?
-- Bobe (Aurélien Maille) http://webnaute.net
"la vie d'un geek est un combat perpétuel contre l'imperfection"
J.J.SOLARI nous a dit le 16/05/2004 23:07:
Le problème résidait (plutôt, réside toujours) principalement, comme il
me semble que c'est ton cas, dans l'incompatibilité entre les jeux de
caractères win-1252 (et d'autres win-xxxx) avec iso-8859-1.
Je m'en étais sorti en mappant chacun des caractères du jeu cp-1252
situés dans la zone réservée (selon iso-8859-1) par leur équivalent
Unicode. Voici ce que ça donnait :
Quelle était la provenance des données ?
Car dans le cas d'un formulaire html par exemple, et si le charset de la page
est ISO-8859-1, le navigateur devrait théoriquement envoyer les données sous
le charset ISO-8859-1 non ?
--
Bobe (Aurélien Maille)
http://webnaute.net
"la vie d'un geek est un combat perpétuel contre l'imperfection"
Le problème résidait (plutôt, réside toujours) principalement, comme il me semble que c'est ton cas, dans l'incompatibilité entre les jeux de caractères win-1252 (et d'autres win-xxxx) avec iso-8859-1.
Je m'en étais sorti en mappant chacun des caractères du jeu cp-1252 situés dans la zone réservée (selon iso-8859-1) par leur équivalent Unicode. Voici ce que ça donnait :
Quelle était la provenance des données ?
Car dans le cas d'un formulaire html par exemple, et si le charset de la page est ISO-8859-1, le navigateur devrait théoriquement envoyer les données sous le charset ISO-8859-1 non ?
-- Bobe (Aurélien Maille) http://webnaute.net
"la vie d'un geek est un combat perpétuel contre l'imperfection"