utf8_encode et encodeURIComponent
Bonjour, malgré les différents messages tournant autour de UTF8, je ne comprends pas comment mes sites en PHP peuvent fonctionner ...
vec les accents, et les caractères & et tout et tout ... :roll:
Mes formulaires sont lus par un Javascript qui fabrique l'Url de réponse en utilisant encodeURIComponent qui traduit mon texte en UTF8 (d'après la doc !).
le bout de phrase "habitué à " est donc traduit en "habitu%C3%A9%20%C3%A0%20".
je récupère ensuite les variables $_GET en leur appliquant un bon utf8_decode pour l'affichage et c'est correct. :ccool:
A l'affichage d'un tableau contenant les données, (c'est mon design) je fabrique pour chaque ligne un lien pour appeler ensuite cette ligne (comme dans PhpmyAdmin par exemple).
Donc, j'utilise utf8_encode pour le bout de phrase "habitué à " et j'obtiens "habitu%E9+%E0+" . :mouarf:
Evidemment, tout ceci ne peut fonctionner, et tant que je ne maîtrise pas cette situation, je demande à mes utilisateurs de ne pas mettre d'accents :oops:
Alors, pour des utilisateurs internationaux, c'est pas le pérou ! :aie:
je confirme, utf8_encode marche bien !
Après consultation du site http://www.unicode.org/, je confirme, utf8_encode fonctionne bien ;)
mon "é" est bien traduit par %E9 et mon "à" par %E0 et ...
l'espace par un "+" ? Ah bon, je croyais que c'était %20 ?? !!! :calim2:
Dois y avoir une surcouche qui bricole le résultat ....
En tout cas, la surcouche qui traduit un "é" en %C3%A8" et un "à" en "%C3%A0" m'est inconnue ...
alors qu'elle traduit bien " " en "%20" :aie:
La comparaison bestiale ....
ci-joint ce petit bout de code :
Code:
1 2 3 4 5 6 7 8
|
define (br,"<br />"); # J'en ai beaucoup, c'est moins fatiguant à taper
$Chaine = "habitué à rôtir pour de l'";
echo "Originale:".$Chaine.br;
echo "Utf8:".utf8_encode($Chaine).br;
echo "Url:".urlencode($Chaine).br;
echo "Html:".htmlentities($Chaine).br;
echo "Raw:".rawurlencode($Chaine).br; |
à l'affichage, cela donne
Code:
1 2 3 4 5
| Originale:habitué à rôtir pour de l'
Utf8:habitué à rôtir pour de l'â¬
Url:habitu%C3%A9+%C3%A0+r%C3%B4tir+pour+de+l%27%E2%82%AC
Html:habitué à rôtir pour de l'�
Raw:habitu%C3%A9%20%C3%A0%20r%C3%B4tir%20pour%20de%20l%27%E2%82%AC |
La fonction Javascript encodeURIComponent fournit un résultat équivalent à la fonction Php rawurlencode ...
Ce qui pourrait convenir à mes attendus précédents ... mais ... :cry:
Le lien fabriqué par la fonction rawurlencode , une fois appliqué à l'url, ne fournit plus le résultat escompté,
un à traduit par javascript en %C3%A9 est traduit en %E9, ce qui est exactement le code de à en UTF8.
Mais alors, c'est quoi la traduction fournie par encodeURIComponent !
Les sites de Microsoft et Mozilla sont assez laconiques (hic) sur le sujet