Bonjour à tous,

Je gère un site conçu avec spip 3.

J'essaie en vain de passer mon site d'un jeu de caractères iso-8859-1 à utf-8 afin de corriger un vilain problème d'affichage qui fait que tous les caractères accentués sont remplacés par les losanges noirs avec à l'intérieur un point d'interrogation.

Pour ce faire, j'ai :

- modifié le Jeu de caractères du site de iso-8859-1 à utf-8,
- encodé tous les fichiers html en utf-8 sans bom,
- convertis toutes les tables en utf-8 avec la commande sql ALTER TABLE
{tablename} CONVERT TO CHARACTER SET utf8; (merci encore Frédéric pour ses
conseils).
- lancé la commande sql SET NAMES 'utf8';

mais rien à faire, j'ai toujours les losanges noirs à la place des caractères accentués Smiley bawling

Aurais-je loupé une étape ?

Par ailleurs, je remarque que dans PhpMyAdlin toutes les tables ne sont pas en utf-8, ce qui explique peut-être le problème, notamment les tables suivantes :

Collation database et collation server qui sont en latin1_swedish_ci

Comment puis-je modifier ces tables pour les faire passer en utf-8 ?

Quelle est la démarche pour passer un site spip de iso-8859-1 à utf-8 ?

Merci à tous pour votre aide, je ne sais plus quoi faire...

Amicalement,

Thierry
Bonjour,

Sab42 a écrit :
J'essaie en vain de passer mon site d'un jeu de caractères iso-8859-1 à utf-8 afin de corriger un vilain problème d'affichage qui fait que tous les caractères accentués sont remplacés par les losanges noirs avec à l'intérieur un point d'interrogation.

Mauvaise méthode. Si tu as des losanges noirs, c'est que:
- soit tu as des données corrompues,
- soit tu as des données correctes mais dont le charset est mal déclaré.
C'est sur cette deuxième hypothèse qu'il faudrait travailler initialement.

Par exemple, si tu as des données ISO-8859-1 en base, que tu récupères ces données ISO-8859-1 non modifiées en PHP, et que tu déclares tes pages HTML en UTF-8, tu obtiens ce genre de symbole «caractère non reconnu» (le losange noir). La solution initiale consiste alors à déclarer ta page en ISO-8859-1. Ensuite, éventuellement, tu peux envisager une conversion complète du site d'un codage à un autre.

Avec ce que tu as fait, tu ne sais pas quel était le problème initial au juste, et tu as suivi un ensemble d'étapes en espérant qu'elles résoudraient ce problème que tu n'as pas identifié. Un peu casse-gueule comme manière de faire. Mais bon, c'est sans doute rattrapable.

a écrit :
- modifié le Jeu de caractères du site de iso-8859-1 à utf-8,

Qu'entends-tu par «jeu de caractères du site»? Celui déclaré dans les en-têtes HTTP? Celui déclaré dans une balise <meta> dans ton code HTML? Les deux à la fois?

a écrit :
- lancé la commande sql SET NAMES 'utf8';

Il faut l'envoyer à chaque connexion MySQL pour que la connexion entre le client (ton script PHP par exemple) et le serveur MySQL se fasse en UTF-8 (par défaut, les serveurs sont généralement configurés pour du ISO-8859-1/latin1). Donc c'est à rajouter dans ta fonction de connexion dans un script PHP custom. Vu que tu utilises un script existant (un CMS en l'occurrence), c'est sans doute dans la configuration de ce CMS que ça se passe.

a écrit :
mais rien à faire, j'ai toujours les losanges noirs à la place des caractères accentués

Tu avais peut-être des données corrompues à la base, et dans ce cas tout ce que tu as fait ne sert pas à grand chose. Ou bien tu avais des données déjà en UTF-8 en base, et tu les a transcodées en UTF-8, ce qui a corrompu tes données. Ou bien tu avais des données latin1 en base, elles ont été converties en UTF-8, mais ta connexion MySQL se fait en latin1 et MySQL convertit tes données en ISO-8859-1 avant de te les envoyer.

a écrit :
Aurais-je loupé une étape ?

Oui: diagnostiquer le problème de départ au lieu de dire «j'ai un problème d'encodage, je vais tout passer en UTF-8». Smiley cligne

a écrit :
notamment les tables suivantes :
Collation database et collation server qui sont en latin1_swedish_ci

"Collation database" et "collation server", ce ne sont pas des tables. Smiley ohwell
Bonjour fvsch,

Un grand merci pour ta réponse.

Je vais essayer d'expliquer au mieux les raisons de ma démarche et notamment l'origine du problème :

Suite à une mise à jour de Spip, j'ai remarqué que les lettres accentuées des nouveaux messages des forums et des nouvelles légendes des images ne sont plus prises en compte. En effet, les lettres accentuées ne s'affichent pas à l'écran lorsque le message ou la légende sont en ligne. Les caractères accentués disparaissaient, ce qui rend le texte illisible comme dans les exemples ci-dessous :

Voici un exemple de message de forum : Je suis bloqu avec vos anctres (au
lieu de Je suis bloqué avec vos ancêtres).

Voici un exemple de légende d'image : Le rgiment tranger (au lieu de Le
régiment étranger).

J'ajoute que, dernièrement, pour compliquer encore les choses, j'ai vu que 2 messages de forums avaient été publiés avec tous leurs caractères accentués !!! Pourquoi ceux-ci et pas les autres ? Mystère !

Dans un premier temps, j'ai demandé de l'aide sur un forum Spip et l'on m'a conseillé de passer le site "à la main" en utf-8 car, pour un utilisateur, cela avait corrigé les problème des lettres accentuées qui disparaissent.

J'ai donc suivi la procédure indiquée ci-dessus dans mon précédent message... mais depuis, si je laisse le charset sur utf-8, j'ai ce vilain problème d'affichage qui fait que tous les caractères accentués sont remplacés par les losanges noirs avec à l'intérieur un point d'interrogation.

Aussi, afin que le site reste lisible, j'ai donc remis le charset sur iso-8859-1 (Jeu de caractères du site) et je n'ai plus de losanges noirs mais j'ai toujours le souci des lettres accentuées qui disparaissent.

Pour info, sous Spip, le Jeu de caractères du site permet de définir d'un simple clic le charset de toutes les pages/templates du site grâce au code suivant présent sur chaque page :

[(#REM) Preciser le charset ]
<meta http-equiv="Content-Type" content="text/html; charset=#CHARSET" />


Bref, pour l'heure :

- mon jeu de caractère (charset) est sur iso-8859-1
- tous les fichiers/template html du site sont en utf-8 sans bom
- les tables de la base de donnée sont en utf-8 (conversion réalisée avec la commande sql ALTER TABLE {tablename} CONVERT TO CHARACTER SET utf8;

Est-ce qu'il ne serait pas raisonnable que je fasse machine arrière pour revenir à la situation initiale, et donc que :

- je repasse mes templates en iso-8859-1
- je convertis les tables de la base en iso-8859-1

Merci par avance pour tes conseils,

Amicalement,

Thierry
Bonjour à tous,

Je viens de faire quelques captures d'écran de ma base de données.
Est-ce que quelqu'un peut y jeter un oeil pour me dire ce qui cloche et pourrait expliquer mon problème de caractères accentués qui disparaissent dans les nouveaux messages de forums et les légendes des images et documents ?

Merci par avance,


upload/45990-variables.jpg

Il y a des variables en utf-8, d'autres en latin1 et d'autres en latin1_swedish_ci, est-ce normal ?

upload/45990-mysql.jpg

L'interclassement pour la connexion est MySqul est en utf8_general_ci et le jeu de caracère pour Mysql en Utf_8 unicode, est-ce normal ?

upload/45990-myisam.jpg

Toutes mes tables sont en utf-8 mais la somme des 39 tables indiquent latin1_swedish_ci , est-ce normal ???

Merci pour votre aide,

Thierry
J'ai eu un problème similaire en ayant sur une page du code en dur (du texte en l'occurence) et dans un select des données d'une table ou TOUT était en utf-8 ainsi que le charset html
j'ai trouvé une solution qui vaut ce qu'elle vaut en transcodant les données de MySql avec la fonction "utf8_encode"
dis moi ce que tu en penses, autres experts dites moi également ce que ça vaut comme solution svp

LMA
Sab42 a écrit :
Bonjour à tous,

Je viens de faire quelques captures d'écran de ma base de données.
Est-ce que quelqu'un peut y jeter un oeil pour me dire ce qui cloche et pourrait expliquer mon problème de caractères accentués qui disparaissent dans les nouveaux messages de forums et les légendes des images et documents ?

Merci par avance,


upload/45990-variables.jpg

Il y a des variables en utf-8, d'autres en latin1 et d'autres en latin1_swedish_ci, est-ce normal ?

upload/45990-mysql.jpg

L'interclassement pour la connexion est MySqul est en utf8_general_ci et le jeu de caracère pour Mysql en Utf_8 unicode, est-ce normal ?

upload/45990-myisam.jpg

Toutes mes tables sont en utf-8 mais la somme des 39 tables indiquent latin1_swedish_ci , est-ce normal ???

Merci pour votre aide,

Thierry
Est-ce quelqu'un peut lire les fichiers images de mes tables pour me dire ce qui cloche ?

Merci par avance,

Sab42

Sab42 a écrit :
Bonjour,

Une question : est-il normal que certaines collations soient en utf8_general_ci et d'autres en latin1_swedish_ci ?

collation connection utf8_general_ci
(Valeur globale) latin1_swedish_ci

collation database latin1_swedish_ci
collation server latin1_swedish_ci

Merci pour votre aide,

Sab42