Rechercher : dans
Par :

[PHP/MYSQL] Comment traduire les accents ???

Dernière réponse le 3 aoû 2009 à 11:47:02 benjam89, le 18 aoû 2007 à 16:56:35 
 Signaler ce message aux modérateurs

Bonjour,
J'ai un formulaire d'enregistrement de données du visiteur, et lorsque mon script d'insertion enregistre les données, tout les mots contenant des accents comme é, à, ... dont traduits en code. Comment éviter celà ?

Par exemple, le mot gérez, une fois dans la base de données s'écrit Gérez

Merci de vos réponses

Merci de vos réponse.

Configuration: Windows XP
Firefox 2.0.0.6

1

Posotaz, le 19 aoû 2007 à 17:39:12
  • +7

Bonjour,

Oulala ces encodages, ce n'est pas le sujet que je préfère :p

L'UTF8 est encore mal géré par les langages de programmation. Nativement, le PHP 5 (et en dessous) ne le gère pas et il faut utiliser les fonctions utf8_decode et utf8_encode avant de procéder à l'envoi vers la base de données (supposant qu'elle ait été concue en Unicode).

Une autre idée serait de transformer les caractères accentués en entités HTML. Par exemple le é devient é . Pour ce faire tu as la fonction html_entities et html_decode. Unicode ou pas, les entités HTML utilisent des caractères figurant dans la liste des 127 standarts et en principe ça s'enregistre correctement.

Si tu veux vraiment ne pas te casser la tête, passe entièrement en ISO-8859-1, tu n'auras à faire aucune conversion.

En tout cas il faut suivre une certaine logique :

- Le mode d'enregistrement de ton fichier
- Le charset déclaré en entête de ton fichier HTML
- Le charset de la base de données (de la table et des champs)

doivent avoir le même charset. Et même avec ça, sur base de ce que j'ai dit à propos du PHP qui ne gère pas encore l'UTF8 correctement, ça n'empêchera pas de devoir faire une conversion/reconversion explicite.

Ca fait un petit moment que j'ai terminé un certain projet complètement UTF8 et si je me souviens d'une chose c'est que ça n'a pas été de tout repos et j'ai passé des journées entières à tester les charsets. Donc bon courage !

Répondre à Posotaz

2

benjam89, le 19 aoû 2007 à 18:13:33

Merci pour ta réponse, mais j'ai mis en ISO-8859-1, mais c'est exactement la même chose.......

Merci d'avance de vos prochaines réponses !

Répondre à benjam89

3

LeSquale35, le 19 aoû 2007 à 20:53:35

Il faut remplacer les accents (et autres caracteres speciaux) par leur code ISO :
http://www.toutimages.com/codes_caracteres.htm

Répondre à LeSquale35

4

Posotaz, le 19 aoû 2007 à 21:43:32

Mmmm... Si tout est bien configuré on n'a pas besoin de faire cette conversion, LeSquale35. La conversion en code ISO (et accessoirement en entités HTML) a été introduite afin que le caractère soit affiché correctement quel que soit l'encodage utilisé, lorsque les navigateurs Web du monde entier ne comprenaient pas encore l'entièreté de l'ISO-8859-1 ou étaient incapable d'adapter l'encodage lorsque le concepteur de la page Web n'indiquait pas explicitement le charset (ça arrive encore) <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />

L'inconvénient de cette méthode est que le stockage en code prend plus de place (pour un caractère accentué il faut au minimum en utiliser 4).

Benjam89 je n'ai malheureusement rien d'autre à te proposer. Tu dois être certain à 100% que ta table ET tes champs soient en "latin". C'est important de vérifier ça tant au niveau de la table que des champs. Maintenant si tu as déjà encodé quelque chose dans ces tables, le fait de changer l'encodage ne fera pas la conversion de ce qui a déjà été encodé donc ça va rester de l'Unicode. Ca ne peut pas ne pas fonctionner ou alors c'est ton script PHP (si c'est un truc que tu as récupéré quelque part) qui fait cette conversion.

Répondre à Posotaz

5

Charly, le 24 aoû 2008 à 16:52:20

Normalement c'ets fait en natif selon la configuration du serveur, tu ne devrais pas avoir de soucis avec une base en "Latin"

Par contre si tu passes par de 'lajax pour charger tes pages php, ca sera appelé en UTF-8 généralement, du moins ca va te rapatrier les accents de la base de données sans pour autant te els afficher (ca sera des ?)

Voila une petite fonction pour réécrire les accents tu peux aussi l'utiliser sur els variable avant de les envoyer à la base de données, cependant mieux vaut éviter de stocker de l'hmtl dans ta base, c'ets toujours mieux de stocker tel quel


function safeName($string)
{
$string=strtolower($string);
$patterns = array('/é/','/è/','/ê/','/à/','/â/','/ù/','/ü/','/û/','/ä/','/ë/','/ç/','/ô/','/ö/');
$replacements = array('é','è','ê','à','â','ù','ü','û','ä','ë','ç','ô','ö');
$string=preg_replace($patterns, $replacements, $string);
return $string;
};


Ca reprends les principaux accents, tu peux rajouter à l'infi ce que tu veux remplacer, la je 'mattaque qu'aux minuscules

Répondre à Charly

11

Vins974, le 22 jan 2009 à 11:22:08

Charly salut

J'ai le problème, des points d'intérrogation, et j'utilise de l'AJAX.. Je voudrais savoir ce qu'il faudrait faire stp, car je ne comprends pas très bien ce que t'as expliker.

Merciii

Répondre à Vins974

6

StresS, le 24 aoû 2008 à 16:53:36

Htmlentities(); fe ca tres bien ;)

Répondre à StresS

8

Charly, le 24 aoû 2008 à 16:59:58

MDR effectivement, j'avais complètement zappé cette fonction qui te fera excatement la même chose :D

Il est vrai que safeName me sert plutôt à dégager des caractères spéciaux pour générer des noms de fichiers :p

Ceci-dit il est toujours conseillé de travailler en UTF-8, mais bon, si tu veux que l'UTF-8 te pose aps de soucis, faut absoluement bien enregistrer tes fichiers qui généralement seront en AINSI, sinon même tes ouvertures de sessions ne marcheront pas, une fois que tu y es habitué, ça ne devrait pas te poser de problèmes

PS : merci Stress pour la fonction =)

Répondre à Charly

7

Charly, le 24 aoû 2008 à 16:55:02

Bon, le forum réécrit le 2e tableau remplacement, il est évident que pour chaque entrée du tableau tu écris la correspondance en html

pour le é par exemple : & e a c u t e ;

Répondre à Charly

9

arsene, le 20 oct 2008 à 09:59:21
  • +1

J'ai trouvé ce truc très efficace:

..... WHERE `terme` LIKE CONVERT( _utf8 '%accès%' USING latin1 )

Répondre à arsene

10

rufus_, le 2 nov 2008 à 09:49:12

Concrètement si on encode tous les fichiers en ISO-8859-15 en quel code doit être la base de données mySQL 5 ?
UTF-8 ? Latin mais lequel ? vu que le ISO-8859-15 = latin 9 et que je trouve que le latin 1 a 7 comme options de la base

merci

Répondre à rufus_

13

 visiteur, le 3 aoû 2009 à 11:47:02

Utiliser simplement la fonction "html_entity_decode($nom_de_la_variable)"
chez moi ça s'affiche nickel

Répondre à visiteur
Collection CommentÇaMarche.net