cathalogue a écrit :
j'aimerais juste vous présenter deux fonctions php que j'utilise souvent pour éviter les désastres;
il s'agit de utf8_encode() et de utf8_decode()
Raaaah bordel c'est pas possible! Encore ces bêtises?
Mais lisez un peu la doc PHP pour comprendre ce que vous faites!
cathalogue a écrit :
lorsque la page est encodée en UTF-8 les données qui sont envoyées dans la base de donnée sont d'habitudes avec des ?$£§
Lorsque la page est déclarée en UTF-8, le navigateur va envoyer la saisie de l'utilisateur en UTF-8. (Si la page est déclarée en ISO-8859-1, il l'envoie en ISO-8859-1, et ainsi de suite.) Ton job à toi, c'est de configurer correctement ta base de données et tes scripts pour stocker ces données UTF-8 telles quelles, sans chercher à transcoder dans un codage de caractères différent (sinon tu perds tout l'intérêt d'Unicode, et ça sert donc à rien de bosser en UTF-8 à la base, soyons logiques). (Important: bien sûr on ne stocke pas les données en base telles quelles, il faut a minima faire quelques vérifications pour empêcher les injections SQL, sinon faille de sécurité béante...)
cathalogue a écrit :
pour cela il faut decoder toutes les données en utf-8 juste avant de faire ta requête d'envoie
Non, mille fois non.
Ce que fais ton code, c'est:
1. Recevoir des données a priori en UTF-8.
2. Les transcoder vers ISO-8859-1 grâce à
utf8_decode().
3. Stocker les données ISO-8859-1 obtenues dans ta base de données.
Bottom line: ta base de données est en ISO-8859-1, pas en UTF-8, donc ton site ne retire strictement aucun avantage de l'utilisation d'UTF-8, vu que tu es limité au jeu de caractères ISO-8859-1 (quand tu utilises utf8_decode, les milliers de caractères existant en UTF-8 mais pas en ISO-8859-1 sont perdus, remplacés par des points d'interrogation -> donc tu pourris tes données, super).
cathalogue a écrit :
---> ( et faire un utf8_decode() juste avant d'envoyer les donnés dans la base)
NON.
cathalogue a écrit :
---> ( ensuite assuré vous que les données seront récupéré en utf-8 sinon vous faite un utf8_encode() avant d'afficher un donnée qui vien de votre bdd)
Non plus.
Pour rappel, utf8_encode transcode des données de ISO-8859-1 (et c'est effectivement ce type de données que tu as en base, vu les bêtises faites plus haut...) vers UTF-8.
LA BONNE SOLUTION c'est de bosser en UTF-8 d'un bout à l'autre, d'envoyer des données UTF-8 dans ta base de données, d'avoir une base en UTF-8 donc, et de récupérer ces données UTF-8 de la base quand tu veux en afficher sur ton site. Les fonctions utf8_decode et utf8_encode sont donc rigoureusement inutiles (elles n'ont d'intérêt que si tu travailles
sciemment avec des données mixtes, par exemple si tu as plusieurs bases de données dont une en ISO-8859-1 qui est partagée avec une autre application et que tu ne peux donc pas convertir en UTF-8 une bonne fois pour toutes).
Bon, désolé de m'énerver ainsi mais
lisez la doc avant de faire et conseiller des bêtises, quoi.
Modifié par fvsch (25 Aug 2012 - 12:59)