OVH Cloud OVH Cloud

Probléme d'encodage Web

9 réponses
Avatar
Jonathan
Salut,
J'ai des mots encodé en UTF8 (formatHTML).
exemple :
AIR%2DLIQUIDE+SANTE+FRANCE
AFAQ+AFNOR+CERTIFICATION
EXP%2DAIR+SYSTEM

et j'aimerai les affiché sans leurs encodage, c'est à dire que les "+"
redeviennent des espaces , les "%2D" reviennent des "-".
j'aimerais savoir si personne n'a une fonction qui fait déjà ceci ?
cordialement.

9 réponses

Avatar
ASM
Salut,
J'ai des mots encodé en UTF8 (formatHTML).
exemple :
AIR%2DLIQUIDE+SANTE+FRANCE
AFAQ+AFNOR+CERTIFICATION
EXP%2DAIR+SYSTEM

et j'aimerai les affiché sans leurs encodage, c'est à dire que les "+"
redeviennent des espaces , les "%2D" reviennent des "-".
j'aimerais savoir si personne n'a une fonction qui fait déjà ceci ?


unescape('AIR%2DLIQUIDE+SANTE+FRANCE').replace(/+/g,' ');

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

Avatar
ASM

et j'aimerai les affiché sans leurs encodage, c'est à dire que les "+"
redeviennent des espaces , les "%2D" reviennent des "-".
j'aimerais savoir si personne n'a une fonction qui fait déjà ceci ?



http://fr.selfhtml.org/javascript/objets/regexp.htm

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


Avatar
Pierre Goiffon
Jonathan wrote:
Salut,
J'ai des mots encodé en UTF8 (formatHTML).
exemple :
AIR%2DLIQUIDE+SANTE+FRANCE
AFAQ+AFNOR+CERTIFICATION
EXP%2DAIR+SYSTEM

et j'aimerai les affiché sans leurs encodage, c'est à dire que les "+"
redeviennent des espaces , les "%2D" reviennent des "-".
j'aimerais savoir si personne n'a une fonction qui fait déjà ceci ?
cordialement.


C'est un vrai prb ça...
escape / unescape fonctionnent en ISO Latin-1
Heureusement les versions suivantes ont apportées encodeURI / decodeURI
qui fonctionnent en UTF-8 !

Voir :
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference

Attention cependant car le passage de chaines en GET est un prb assez...
velu pour tout dire. Voir par exemple cette page :
http://ppewww.physics.gla.ac.uk/~flavell/charset/form-i18n.html
(semble inaccessible ???)

Avatar
ASM
Jonathan wrote:
Salut,
J'ai des mots encodé en UTF8 (formatHTML).
exemple :
AIR%2DLIQUIDE+SANTE+FRANCE
AFAQ+AFNOR+CERTIFICATION
EXP%2DAIR+SYSTEM

et j'aimerai les affiché sans leurs encodage, c'est à dire que les "+"
redeviennent des espaces , les "%2D" reviennent des "-".
j'aimerais savoir si personne n'a une fonction qui fait déjà ceci ?
cordialement.


C'est un vrai prb ça...
escape / unescape fonctionnent en ISO Latin-1
Heureusement les versions suivantes ont apportées encodeURI / decodeURI
qui fonctionnent en UTF-8 !


decodeURI() n'a pas l'air de me faire plus que unescape()
pour 'AIR%2DLIQUIDE+SANTE+FRANCE' par exemple,
quelque soit le charset de la page ...


alert(unescape('AIR%2DLIQUIDE+SANTE+FRANCE').replace(/+/g,' '));
---> AIR-LIQUIDE SANTE FRANCE
alert(decodeURI('AIR%2DLIQUIDE+SANTE+FRANCE'));
---> AIR-LIQUIDE+SANTE+FRANCE

Voir :
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference



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


Avatar
Pierre Goiffon
ASM wrote:
decodeURI() n'a pas l'air de me faire plus que unescape()
pour 'AIR%2DLIQUIDE+SANTE+FRANCE' par exemple,
quelque soit le charset de la page ...


Les méthodes decodeUri et unescape sont indépendantes du codage utilisé
par le navigateur pour visualiser la page. L'une fonctionne avec UTF-8,
l'autre avec ISO Latin-1.

On notera au passage que c'est une bonne chose, les recommandations pour
systématiquement passer par de l'UTF-8 dès que l'on passe des chaines
dans l'URL sont légion, tellement c'est problématique !

alert(unescape('AIR%2DLIQUIDE+SANTE+FRANCE').replace(/+/g,' '));
---> AIR-LIQUIDE SANTE FRANCE
alert(decodeURI('AIR%2DLIQUIDE+SANTE+FRANCE'));
---> AIR-LIQUIDE+SANTE+FRANCE


Stéphane, tu aurais du aller jeter un oeil à l'excellent outil mis à
disposition par Olivier !
=> http://www.miakinen.net/vrac/charsets/

Dans l'onglet ISO-8859-1 (cad ISO Latin-1), sélectionne le caractère 2D
(ligne 20 et colonne 0D)
Dans le 1er tableau à droite ("À la même position dans toutes les
tables") tu verra que ce caractère est codé à l'identique entre ISO
Latin-1 et UTF-8

C'est d'ailleurs la principale caractéristique d'UTF-8 : les 127
caractères d'ASCII sont codés de manière absolument identique !

A noter aussi que les 256 premiers code points Unicode correspondent aux
no de caractères dans le jeux ISO Latin-1

Avatar
Pierre Goiffon
ASM wrote:
J'ai des mots encodé en UTF8 (formatHTML).
exemple :
AIR%2DLIQUIDE+SANTE+FRANCE
AFAQ+AFNOR+CERTIFICATION
EXP%2DAIR+SYSTEM

et j'aimerai les affiché sans leurs encodage, c'est à dire que les "+"
redeviennent des espaces , les "%2D" reviennent des "-".
j'aimerais savoir si personne n'a une fonction qui fait déjà ceci ?


unescape('AIR%2DLIQUIDE+SANTE+FRANCE').replace(/+/g,' ');


Sauf que l'on aura des résultats étranges avec une chaine comme celle-ci
(cad qui contient des caractères qui sont en-dehors des 127 caractères
de us-ascii) :

%C3%A9%C3%A8%C3%AA%C3%A0%C3%A7

Résultat obtenu avec unescape :
éèêà ç

Avec decodeURI :
éèêàç

Résultats obtenus très rapidement avec cette petite page de test :
http://pgoiffon.free.fr/_temp/JS_escape_encodeuri.html


Avatar
ASM
ASM wrote:
decodeURI() n'a pas l'air de me faire plus que unescape()
pour 'AIR%2DLIQUIDE+SANTE+FRANCE' par exemple,
quelque soit le charset de la page ...


Les méthodes decodeUri et unescape sont indépendantes du codage utilisé
par le navigateur pour visualiser la page. L'une fonctionne avec UTF-8,
l'autre avec ISO Latin-1.


Voilà qui précise l'éclairage.

On notera au passage que c'est une bonne chose, les recommandations pour
systématiquement passer par de l'UTF-8 dès que l'on passe des chaines
dans l'URL sont légion, tellement c'est problématique !

alert(unescape('AIR%2DLIQUIDE+SANTE+FRANCE').replace(/+/g,' '));
---> AIR-LIQUIDE SANTE FRANCE
alert(decodeURI('AIR%2DLIQUIDE+SANTE+FRANCE'));
---> AIR-LIQUIDE+SANTE+FRANCE


Stéphane, tu aurais du aller jeter un oeil à l'excellent outil mis à
disposition par Olivier !
=> http://www.miakinen.net/vrac/charsets/


Je n'ai point besoin de revoir les charset pour imaginer que des
caractères ASCII sont des caractères ASCII :-)

C'est d'ailleurs la principale caractéristique d'UTF-8 : les 127
caractères d'ASCII sont codés de manière absolument identique !


Ouf ! j'l'avions echapé belle ! :-)


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


Avatar
ASM
ASM wrote:
J'ai des mots encodé en UTF8 (formatHTML).
exemple :
AIR%2DLIQUIDE+SANTE+FRANCE
AFAQ+AFNOR+CERTIFICATION
EXP%2DAIR+SYSTEM

et j'aimerai les affiché sans leurs encodage, c'est à dire que les "+"
redeviennent des espaces , les "%2D" reviennent des "-".
j'aimerais savoir si personne n'a une fonction qui fait déjà ceci ?


unescape('AIR%2DLIQUIDE+SANTE+FRANCE').replace(/+/g,' ');


Sauf que l'on aura des résultats étranges avec une chaine comme celle-ci
(cad qui contient des caractères qui sont en-dehors des 127 caractères
de us-ascii) :


Certes.
et je répondais uniquement à la question posée.

M'étonne que tu n'aies pas demandé :
" et dans quel contexte voulez-vous utiliser cela ?"
" Dites-nous quelles sont vos finalités et les moyens employés"
" Il faudrait préciser un peu plus votre besoin et votre contexte"
" Une URL pour tester le prb ? "
:-)

Si on ne sait d'où nous arrive ce "liquide aéré pour la santé française"
ça ne facilite pas vraiment le choix de la méthode de traduction.

Au vu de la demande ( '%2D' <-> '-' )
ça me semblait renifler l'escape/unescape ...
mais comme ça renifle aussi encodeURI/decodeURI ...
le suspens haletant demeure.


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



Avatar
Pierre Goiffon
ASM wrote:
M'étonne que tu n'aies pas demandé :
" et dans quel contexte voulez-vous utiliser cela ?"
" Dites-nous quelles sont vos finalités et les moyens employés"
" Il faudrait préciser un peu plus votre besoin et votre contexte"
" Une URL pour tester le prb ? "
:-)


:)
Le prb posé me paraissait clair ! Mais par contre j'insiste pour dire
que la transmission de chaines par URL est assez délicat...