Accents

Résolu/Fermé
Utilisateur anonyme - 9 juin 2014 à 13:22
mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 9 juin 2014 à 21:38
Bonjour,
Je rencontre actuellement un problème : J'ai un formulaire contenant un textarea. Le contenu du textarea est stocké dans une base de données. J'appelle ensuite sur une page de mon site internet le contenu en question, mais lorsque celui-ci contient des accents, il n'apparaît pas sur la page.
Donc les accents empêchent l'affichage du contenu.

En revanche, en local, tout fonctionne même lorsqu'il y a des accents. J'ai donc conclu que le problème ne venait pas des fichiers mais de la base de données. Mais d'où et pourquoi ?

Mes deux bases de données (en local et en ligne) sont configurées comme tel :
Type : InnoDB
Interclassement : latin1_swedish_ci

Quant à la colonne en question contenant mon texte :
Type : TEXT
Interclassement : latin1_swedish_ci

Remarque : En ligne comme en local, tout fonctionne y compris avec accents lorsque j'utilise un autre type de colonne que "TEXT" pour enregistrer des chaînes.

J'espère m'être correctement exprimé et avoir été clair,
Merci beaucoup,
K

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
9 juin 2014 à 13:56
'lut, c'est du à l'interclassement: latin1_swedish_ci peut gérer les accents, mais seulement certains.
Pour résoudre la plupart des problèmes d'accents, il faut arrêter de vivre dans le passer et passer à autre chose que de l'ASCII étendu (latin1 par ex) pour choisir l'Unicode, qui gère tous les accents et toutes les langues du monde. Et l'encodage le plus populaire de l'Unicode c'est l'UTF-8; voici comment passer une base en UTF-8:
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Là ou
databasename
est le nom de ta BDD, et
tablename
celui de la table à convertir.
Coté PHP, si tu utilises les APIs
mysql_*
(qui sont obsolètes, il faut passer à PDO), utilises
mysql_set_charset('utf8')
.
Pour PDO, utilise le paramètre
charset=utf-8
lors de la connexion.
Si tu fais du traitement sur le contenu du textarea avec PHP, remplace toutes tes foncions de traitement de texte dans ton code par leur équivalent
mb_*
qui gère l'UTF-8.
0
Je te remercie de ta réponse très rapide, mais du coup, je suis tenté de répondre alors que je n'ai pas encore exploité à 100% ta réponse.
Je m'excuse donc à l'avance.

Ce que j'ai essayé pour le moment : convertir la base et la table grâce à la commande SQL que tu m'as indiqué. Aucun effet.

Je n'utilise pas PDO. Un jour je changerai mais pour le moment je n'ai pas envie de tout changer. Ainsi j'ai ensuite utilisé "mysql_set_charset('utf8')". Résultat : le TEXT que je n'arrivais pas à afficher s'affiche même s'il contient des accents mais en revanche, tous les accents issus des requêtes SQL sont transformés en symboles du type "è" ou "é". C'est problématique n'est-ce pas ?
Comment cela se fait-il ?

Je te remercie.

PS : J'ai peu cherché mais je ne suis pas sûr d'avoir compris ce que tu me disais vis-à-vis de mb_* ! Par "traitement sur le contenu du textarea avec PHP" tu veux parler de

$contenu = addslashes($_POST['contenu ']);
puis de

$contenu = nl2br(htmlspecialchars(stripslashes($donnees['contenu '])));
?

Je passe sûrement pour un idiot mais je suis loin de maîtriser tout cela.
Je te remercie énormément,
K
0
mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
9 juin 2014 à 15:19
Bonjour,

Pour être vraiment tranquille, il faut que toute la chaîne de traitement soit en UTF_8:
https://html5.immo-scope.com/article/general_applisFullUtf8

A+
0
Bon, j'imagine que là je dévie complètement du sujet et qu'il existe déjà beaucoup d'endroits où je pourrais me documenter sur l'encodage, néanmoins après consultation du lien que tu as envoyé, je me suis complètement perdu dans ces histoires.
Jusqu'alors j'avais :
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

Lorsque j'utilise cet encodage les accents du texte "normal" fonctionnent mais ceux qui passent pas la base de données sont transformés en é...

Lorsque je change la balise meta pour :
<meta charset="UTF-8">

et que j'encode mes fichiers en UFT sur Notepad, alors les accents qui passent par la base données marchent mais pas les accents des textes "classiques" qui sont alors transformés en losanges avec un point d'interrogation.

Actuellement Notepad encode par défaut en "ANSI".

Je vous remercie infiniment pour le temps que vous m'accordez,
Très cordialement,
K
0
mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
9 juin 2014 à 21:38
Utiliser PSPAD ou NetBEANS.... L eproblème d'encodage des fichiers source sera résolu.
0