![]() |
Problème d'encodage des caractères dans un formulaire et une base SQL
Bonjour à tous,
Je fais un formulaire une zone de texte. Lorsque l'utilisateur le soumet, le texte est stocké dans une base de données MySQL. Dans les meta de ma page, je déclare le charset comme étant ISO-8859-15. La situation : - Sur les pages persos de Free, le formulaire est encodé en 'ISO-8859-1' - Chez moi, en correspondance avec la configuration par défaut d'apache2 sous debian, le formulaire est encondé en 'UTF-8' Où que je sois, je souhaite convertir les caractères accentués en entités HTML avant de les stocker dans la base de données. J'utilise donc la fonction "htmlentities()" de PHP. Problème : - Par défaut, cette fonction attend du 'ISO-8859-1'. Ce qui a pour résultat, par exemple, de convertir un 'à' en 'Ã '. Donc à la récupération du texte de la base, je n'ai plus trop mon 'à' tant espéré... Vous allez me dire : "htmlentities() prend en paramètre le charset qu'on veut !" J'y répond : "Oui, d'accord, mais selon l'hébergement le charset utilisé pour encoder le texte du formulaire est différent..." J'ai donc pour idée de récupérer le charset utilisé et adapter l'appel de la fonction htmlentities()... Mais comment ? Le but de cette manipulation est de récupérer un texte propre lorsque l'on consulte la base de données. C'est à dire du texte dont tous les caractères spéciaux ont leur équivalent HTML afin d'avoir un affichage correct sur la page... Si vous avez des idées... Je suis preneur ;) Je ne m'étais jamais rendu compte de ce problème parce qu'avant l'apache chez moi était en 'ISO-8859-1', donc dans la base je mettais le 'à' sans le convertir, et je le récupérais simplement... Le premier qui dit que j'ai de drôles de problèmes, qu'il aille se cacher ! J'y suis pour rien cette fois :rolleyes::p Merci d'avance ;) |
J'ai pas tout suivi mais j'ai pas trop compris l'intérêt d'encoder en ISO-8859-15, étant donné que les caractères français sont tous contenus dans ISO-8859-1 et tous les caractères imaginables sont codés dans UTF-8 ^^
|
Là n'est justement pas le problème ;)
Je me fiche bien d'en quoi va être encodé ce qu'un visiteur fout dans le formulaire... Malheureusement si je veux une solution qui plaise à tout le monde lors de la récupération du texte, faut que je convertisse les caractères accentués (par exemple), et pour ça il faut le charset :/ |
Tente les fonctions getallheaders et apache_getenv pour voir si elles ne contiennent pas l'encodage ...
|
Il est en général recommandé de ne pas stocker en base des caractères HTMLisés, mais plutôt du latin-1, voire du utf-8 (très mal géré par PHP je le rappelle) ; tu peux faire la HTMLisation à l'affichage. En gros, tu forces l'encodage de ta page avec les balises META, et tu fais une bête insertion SQL. Le texte inséré sera alors (normalement) encodé en accord avec l'interclassement par défaut de MySQL (en général latin1_swedish_ci).
Maintenant si tu tiens vraiment à jouer avec de l'encodage de caractères, je te conseille l'extension mbstring, et notamment les fonctions mb_convert_encoding et mb_detect_encoding. Mais tout ceci dépend toujours de l'interclassement MySQL (depuis la version 4.1). |
Hmmm, ok, donc :
- Je force l'encodage de la page avec la balise suivante : Code:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> PHP Code:
PHP Code:
|
Ca m'a l'air bon ;)
|
All times are GMT +2. The time now is 17:22. |
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.