[PHP/MYSQL] Comment traduire les accents ???
Résolu/Fermé
benjam89
Messages postés
3
Date d'inscription
samedi 18 août 2007
Statut
Membre
Dernière intervention
24 septembre 2007
-
18 août 2007 à 16:56
Tof - 25 août 2016 à 11:18
Tof - 25 août 2016 à 11:18
A voir également:
- Accent en php
- E avec accent - Guide
- Easy php - Télécharger - Divers Web & Internet
- Retour a la ligne php ✓ - Forum PHP
- Comment faire un accent circonflexe sur un clavier azerty ✓ - Forum Réseaux sociaux
- U accent grave clavier ✓ - Forum Logiciels
18 réponses
Posotaz
Messages postés
489
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
19 juin 2011
225
19 août 2007 à 17:39
19 août 2007 à 17:39
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 !
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 !
Tout de suite après la connection mysql à la base de données, ajoute cette petite ligne de code:
mysql_query("SET NAMES 'utf8'");
Exemple:
$conn = mysql_connect("$dbhost","$dbuser","$dbpass") or die(mysql_error());
mysql_select_db("$dbname") or die(mysql_error());
mysql_query("SET NAMES 'utf8'");
Ainsi, avec tes pages en UTF-8 et une base en latin1, tout est propre :-))
mysql_query("SET NAMES 'utf8'");
Exemple:
$conn = mysql_connect("$dbhost","$dbuser","$dbpass") or die(mysql_error());
mysql_select_db("$dbname") or die(mysql_error());
mysql_query("SET NAMES 'utf8'");
Ainsi, avec tes pages en UTF-8 et une base en latin1, tout est propre :-))
$s=iconv("ISO-8859-1","UTF-8",$s);
muco45
Messages postés
441
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
26 novembre 2013
65
6 janv. 2013 à 02:57
6 janv. 2013 à 02:57
merci beaucouppppp
une autre possibilité pour résoudre le problème :
-il faut utiliser l'interclassement utf8_general_ci au niveau des colonnes et des tables.
-Dans le head, ajoute ce code: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-lorsque tu récupère une donnée dans la bd pour afficher, utilise la fonction utf8_encode($string) ou htmlentities($string)
-lorsque tu récupère une donnée via le formulaire, protège la avec la fonction utf8_decode($variable) avec d'enregistrer dans la bd.
-il faut utiliser l'interclassement utf8_general_ci au niveau des colonnes et des tables.
-Dans le head, ajoute ce code: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-lorsque tu récupère une donnée dans la bd pour afficher, utilise la fonction utf8_encode($string) ou htmlentities($string)
-lorsque tu récupère une donnée via le formulaire, protège la avec la fonction utf8_decode($variable) avec d'enregistrer dans la bd.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
utiliser simplement la fonction "html_entity_decode($nom_de_la_variable)"
chez moi ça s'affiche nickel
chez moi ça s'affiche nickel
Pour ceux qui tomberaient sur ce sujet en quêtes de solution, cette petite fonction resoudra tous vos soucis :
la première commande transforme tout (accents et balises) en code html
la suivante remet les balises html
au final, seuls les accents sont modifiés
Exemple :
echo char("Hé ! texte a<u>ccen</u>tué");
génère le code html suivant
--> Hé ! texte a<u>ccen</u>tué
qui affiche :
--> Hé ! texte accentué
J'ai trouvé ça sur cette page :
http://www.commentcamarche.net/forum/affich-29465-transformer-les-accents-en-eacute-avec-php
function char($text) { $text = htmlentities($text, ENT_NOQUOTES, "UTF-8"); $text = htmlspecialchars_decode($text); return $text; }
la première commande transforme tout (accents et balises) en code html
la suivante remet les balises html
au final, seuls les accents sont modifiés
Exemple :
echo char("Hé ! texte a<u>ccen</u>tué");
génère le code html suivant
--> Hé ! texte a<u>ccen</u>tué
qui affiche :
--> Hé ! texte accentué
J'ai trouvé ça sur cette page :
http://www.commentcamarche.net/forum/affich-29465-transformer-les-accents-en-eacute-avec-php
Posotaz
Messages postés
489
Date d'inscription
samedi 23 juin 2007
Statut
Membre
Dernière intervention
19 juin 2011
225
19 août 2007 à 21:43
19 août 2007 à 21:43
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.
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.
StresS
Messages postés
12
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
24 août 2008
5
24 août 2008 à 16:53
24 août 2008 à 16:53
htmlentities(); fe ca tres bien ;)
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 =)
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 =)
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 ;
pour le é par exemple : & e a c u t e ;
J'ai eu le même problème avec les accents.lorsque que j'insère une donnée via phpmyadmin, les accents sont pris en compte.par contre lorsque je fais l'enregistrement via l'interface de mon application(la page php) les accents ne sont pas pris en compte.
J'ai pu résoudre le problème en ajoutant <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> dans le head.Au niveau de la récupération des données pour enregistrer dans la base,j'ai utilisé la fonction html_entity_decode($nom_variable). Mais pour récupérer les données dans la base et afficher sur le navigateur, j'ai utilisé la fonction htmlentities($nom_variable).
J'utilise mysql 5.5.10 et php 5.3.6 et l'encodage de ma base de données est utf8_general_ci.
Ca marche bien.
J'ai pu résoudre le problème en ajoutant <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> dans le head.Au niveau de la récupération des données pour enregistrer dans la base,j'ai utilisé la fonction html_entity_decode($nom_variable). Mais pour récupérer les données dans la base et afficher sur le navigateur, j'ai utilisé la fonction htmlentities($nom_variable).
J'utilise mysql 5.5.10 et php 5.3.6 et l'encodage de ma base de données est utf8_general_ci.
Ca marche bien.
Bon je vais reposter une réponse, les années ayant passées, le problème de l'utf-8 c'est que ça demande une parfaite gestion de l'encodage, si le site a été construit en iso c'est une galère, mais bon, pas le choix pour du multiling efficace.
Pour la base de donnée, déjà bien penser à la construire en utf-8, sinon au pire vous pouvez toujours rajouter ça après la connexion :
mysql_select_db(_INFOS_DE_CONNEXION_);
mysql_query("SET NAMES utf8");
il est important de récupérer les données dans le bon "format"
Ensuite pour les pages, important aussi que le navigateur les reconnaisse en utf-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Et pour finir le problème de l'utf-8 c'est qu'il faut bien vérifier que ses pages soient encodées en utf-8 (page php, html et même javascript), dreameweaver a la sale habitude de les encoder en iso si il n'y a pas de header déclaré, pour palier ce soucis, sous dreamweaver, faites un contrôle+J ou pomme+J quand la page est ouverte, et dans l'encodage d'enregistrement vérifiez que vous êtes bien en utf-8 et réenregistrez, vous n'aurez plus de problème.
Le seul moment ou vous pourriez avoir besoin de convertir les accents, c'est pour de l'url rewriting pour écrire les urls sans accents, et dans ce cas, appliquez juste un utf8_decode() sur la chaine, puis une fonction classique str_replace(array('é'),array('e'),$string) pour formater la chaine.
Pour la base de donnée, déjà bien penser à la construire en utf-8, sinon au pire vous pouvez toujours rajouter ça après la connexion :
mysql_select_db(_INFOS_DE_CONNEXION_);
mysql_query("SET NAMES utf8");
il est important de récupérer les données dans le bon "format"
Ensuite pour les pages, important aussi que le navigateur les reconnaisse en utf-8
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Et pour finir le problème de l'utf-8 c'est qu'il faut bien vérifier que ses pages soient encodées en utf-8 (page php, html et même javascript), dreameweaver a la sale habitude de les encoder en iso si il n'y a pas de header déclaré, pour palier ce soucis, sous dreamweaver, faites un contrôle+J ou pomme+J quand la page est ouverte, et dans l'encodage d'enregistrement vérifiez que vous êtes bien en utf-8 et réenregistrez, vous n'aurez plus de problème.
Le seul moment ou vous pourriez avoir besoin de convertir les accents, c'est pour de l'url rewriting pour écrire les urls sans accents, et dans ce cas, appliquez juste un utf8_decode() sur la chaine, puis une fonction classique str_replace(array('é'),array('e'),$string) pour formater la chaine.
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
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
rufus_
Messages postés
5
Date d'inscription
lundi 10 mars 2008
Statut
Membre
Dernière intervention
25 janvier 2009
2 nov. 2008 à 09:49
2 nov. 2008 à 09:49
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
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
osjk^ùbhkoer)oblo$)à^fp à^kzeà)$àzfl)$gmprrgcrfggjrtk,ijtfgbCFGR?JTHRRRRRRRRRRRNIOPRETJ?PRFIUP?IOPDF
pour resume je suis daccord avec vous
pour resume je suis daccord avec vous
Bonjour,
J'ai trouvé un site qui fait ça, leur code javascript est pas mal simple, seulement quelques lignes.
https://usefulwebtool.com/fr/convertir-entites-html
J'ai trouvé un site qui fait ça, leur code javascript est pas mal simple, seulement quelques lignes.
https://usefulwebtool.com/fr/convertir-entites-html
lil@
Messages postés
195
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
10 décembre 2014
10
11 août 2011 à 00:32
11 août 2011 à 00:32
Bonjour,
JE suis en train de créer un site internet. Ne m'y connaissant guère, j'utilise un kit graphique gratuit pour me faciliter la vie. Je rencontre des problèmes avec les accents. J'ai bien compris que chaque caractères spéciaux avait son code ISO. J'ai remplacé quelques accents par les codes correspondants et ça fonctionne. Seulement, faudra-t-il convertir chaque accent un par un ? N'y-a-til pas un moyen simple et rapide pour les convertir. Sinon, je ne suis pas sortie de l'auberge.
Merci de me renseigner ;)
JE suis en train de créer un site internet. Ne m'y connaissant guère, j'utilise un kit graphique gratuit pour me faciliter la vie. Je rencontre des problèmes avec les accents. J'ai bien compris que chaque caractères spéciaux avait son code ISO. J'ai remplacé quelques accents par les codes correspondants et ça fonctionne. Seulement, faudra-t-il convertir chaque accent un par un ? N'y-a-til pas un moyen simple et rapide pour les convertir. Sinon, je ne suis pas sortie de l'auberge.
Merci de me renseigner ;)
lil@
Messages postés
195
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
10 décembre 2014
10
11 août 2011 à 00:39
11 août 2011 à 00:39
Sur NVU, j'ai choisi l'encodage des caractères "Occidental ISO-88-59", mais ça n'a pas l'air de fonctionner :(
lil@
Messages postés
195
Date d'inscription
dimanche 24 août 2008
Statut
Membre
Dernière intervention
10 décembre 2014
10
11 août 2011 à 00:39
11 août 2011 à 00:39
Merci de m'aider
19 août 2007 à 18:13
Merci d'avance de vos prochaines réponses !
19 août 2007 à 20:53
https://www.toutimages.com/codes_caracteres.htm