[PHP/Ajax/MySQL] Problème encodage! [Résolu/Fermé]

Signaler
-
 Liodene -
Bonjour,

J'ai essayé toutes les solutions données sur divers topic et rien n'y fait (forcer le header en ISO sur le script php appelé, convertir les variables via mb_convert_encoding avant de les insérer dans la BDD, enregistrer mon fichier PHP en utf8 plutot que AINSI, utiliser les htmlentities...)

Donc pour faire simple, ma page HTML est encodé en "charset=iso-8859-1", car l'encodage utf8 n'affiche pas les accent (uniquement un "?") et ma BDD est en latin_swedish_1, j'ai également essayer utf8_unicode_ci mais ça ne change rien.

Merci d'avance pour votre aide! =)

4 réponses

Messages postés
18443
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2020
4 216
Salut.

Indiquer l'encodage dans la balise meta ne remplace pas l'encodage réel de la page.
C'est pour que le navigateur sache lequel utilisé.
Par défaut, la plupart des serveurs indiquent au navigateur l'ISO-8859-1.
Si ta page est dans cet encodage, inutile de le préciser.
Si tu veux utiliser l'UTF-8, alors il faut l'indiquer dans la meta ou la config du serveur ET enregistrer le fichier dans cet encodage.

Si tu veux utiliser l'UTF-8 :
- Réenregistre ta page dans cet encodage
- Indique le dans la meta ou la config du serveur (ou .htaccess)
- Utilise l'interclassemenet UTF-8 (utf8_bin ou utf8_general_ci)
Si tout ça est respecter, inutile de réencoder les chaines en PHP.
Bonjour et merci d'avoir répondu.

Mais il y a toujours un problème ^^

- J'ai réencodé en utf-8 (sous Notepad++, il remplace les caractères par des x80 etc...)
- J'ai indiqué dans le meta que je voulais du utf-8 (<meta http-equiv="content-type" content="text/html, charset=utf-8"/>"
- J'utilise l'interclassement utf8_general_ci (appliqué à la connexion utilisé, à la bdd, à la table et aux champs).

Les caractères spéciaux sont toujours affichés par un losange avec un "?".
Dans la BDD, il m'a remplacé lescaractères par des "�" mais à la sortie (en utilisant les valeurs de la BDD), cela doit être bon puisqu'il me raffiche le "?"
Messages postés
18443
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
27 septembre 2020
4 216
Le losange noir signifie que le fichier est en UTF-8 mais que le navigateur tente de l'afficher en ISO.
Ici, c'est parce que la meta est incorrecte : c'est un « ; » après « text/html »

Pour la base de données, c'est la même chose qu'avec les pages : changer d'interclassement ne réencode pas les caractères.

Si tes tables sont en UTF-8 mais que les données sont enregistrées grâce à un formulaire en ISO, alors l'encodage en base de données sera l'ISO.
Lorsque tu sélectionneras les données depuis MySQL, il faudra les afficher sur une page en ISO.
EDIT: Je n'ai rien dit! J'ai foiré l'encodage de mon fichier ^^

Ca marche parfaitement! Merci =)