Communauté Informatique NDFR.net

Communauté Informatique NDFR.net (http://www.ndfr.net/forums/index.php)
-   Programmation Web (HTML, PHP, ASP, Java, XML, etc.) (http://www.ndfr.net/forums/forumdisplay.php?f=65)
-   -   Problème d'encodage des caractères dans un formulaire et une base SQL (http://www.ndfr.net/forums/showthread.php?t=7187)

KnuX 12-03-2006 17:13

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 ;)

LeMoi 12-03-2006 17:28

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 ^^

KnuX 12-03-2006 17:53

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 :/

Fred 12-03-2006 19:09

Tente les fonctions getallheaders et apache_getenv pour voir si elles ne contiennent pas l'encodage ...

Benjy 12-03-2006 19:12

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).

KnuX 12-03-2006 19:51

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">
- J'insère le texte dans la base en le protégeant :
PHP Code:

mysql_real_escape_string($montexte

- Je récupère le texte, je l'HTMLise :
PHP Code:

htmlentities($montexte

Cette méthode est correcte ? Merci pour cette mise au clair au fait Benjy, je saisis mieux ;)

Benjy 13-03-2006 17:59

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.