Bonjour tout le monde, je suis en train de refaire mon site en full CSS, je n'ai donc pas modifier le charset du site qui est iso-8859-1, mais désormais quand j'ajoute une news par l'intermédiaire d'un script php (qui lui aussi est en iso-8859-1) les accents ne sont plus affiché correctement.

Vous pouvez voir sur cette page, la différence entre la 1ere news et la seconde.

http://romain.bertolucci.free.fr/site/?r=news

Si quelqu'un a une solution, merci Smiley smile

p.s : j'ai cherché, mis j'ai rien trouvé de concluant, j'ai essayé le charset UTF-8 etc..


Si je met l'encodage UTF-8 et bien la première news va très bien s'afficher mais les autres a la places d'avoir un é par exemple il y a un ? :s
De plus en UTF-8 (vu que que les pages s'affichent par l'intermédiaire d'un include) il ne veut plus valider le decument, alors qu'en iso-8859-1 oui :o


Les news dans ma base de données sont interclassés en utf-8_swedish_ci (le champ qui était de base).



Merci.
Modifié par DevJoe (26 Oct 2007 - 13:57)
Bonjour,

Ta news est bien en UTF8, contrairement au reste du site.

On ne peut pas faire cohabiter les 2 ensemble. Il te faut donc soit repasser la news en iso-8859-1 soit passer le reste en UTF8.

Il est possible que l'encodage de la base (en UTF8 suedois Smiley biggol ) y soit pour quelque chose, à toi de tester.
Hello,

Eh bien, je crois que tu as trouvé tout seul toutes les informations:
- tes pages sont en iso-8859-1;
- les données de ta base sont en utf-8;
- tu utilises tes données en utf-8 directement dans ta page en iso-8859-1;
- au final, tu as un mélange des deux dans ta page.

Solution:
- soit tu passes les pages du site en utf-8;
- soit tu demandes à MySQL de t'envoyer les données en iso-8859-1... ça fera un peu travailler MySQL de faire la traduction, mais pour un petit site ça n'est pas un problème.

Il faudra à priori utiliser SET NAMES iso-8859-1 ou bien SET CHARACTER SET iso-8859-1 (ou bien "latin1" plutôt que "iso-8859-1"?... si MySQL est intelligent, les deux devraient marcher).
Documentation de MySQL:
http://dev.mysql.com/doc/refman/5.0/fr/charset-connection.html
Necromantik a écrit :
(en UTF8 suedois Smiley biggol )

Ce n'est pas de l'UTF-8 suédois... Smiley rolleyes

Encodage: utf-8
Interclassement (collation):: utf-8_swedish_ci

L'interclassement définit l'ordre des différents caractères pour un encodage donné. Les intercalssements "swedish" permettent d'obtenir un ordre alphabétique cohérent en suédois, mais aussi en anglais et en français. C'est l'interclassement par défaut dans MySQL.
Florent V. a écrit :

Ce n'est pas de l'UTF-8 suédois... Smiley rolleyes
[...]


Ah bon, j'ai toujours cru, chez moi c'est general par defaut Smiley biggol
On en apprend tous les jours.

Ceci-dit ça reste de l'UTF8 et joue donc probablement un rôle dans le problème rencontré.
Merci des réponses, alors j'ai mis l'interclassement de ma base de données en latin1_general_cs, mais le résultat est toujours le même.

Voici le screen : http://romain.bertolucci.free.fr/iso.jpg


Maintenant si je met le charset utf-8 a mon index, les caractère spéciaux se transforment en ? (sauf pour la 1ere news, c'eest c'est le problème).

voila le screen : http://romain.bertolucci.free.fr/utf.jpg



Mais pourtant les news proviennent de la même table, je bloque la :s


Merci de votre aide quand même mais j'aurai encore besoin de vous apparement Smiley cligne
DevJoe a écrit :
alors j'ai mis l'interclassement de ma base de données en latin1_general_cs, mais le résultat est toujours le même.
Voici le screen : http://romain.bertolucci.free.fr/iso.jpg

Tu changes l'interclassement, mais ça ne convertit pas par magie tes données de l'UTF-8 vers l'ISO-8859-1. Je rappelle que l'interclassement n'est qu'un moyen pour MySQL de trier les données (par exemple quand tu demandes à ce que les résultats renvoyés soient triés par ordre alphabétique).

Passer par SET NAMES latin1 lors de ta requête MySQL ne convertira pas la base, mais MySQL convertira les données avant de te les envoyer (en iso-8859-1, donc).

DevJoe a écrit :
Maintenant si je met le charset utf-8 a mon index, les caractère spéciaux se transforment en ? (sauf pour la 1ere news, c'eest c'est le problème).

C'est normal, tu déclares un encodage différent, mais l'encodage réel des données n'a pas changé:
- les données issues de ta base sont toujours en UTF-8;
- les données de tes fichiers sont toujours en ISO-8859-1.

J'ai l'impression que les notions d'encodage réel et d'encodage déclaré ne sont pas acquises. Peut-être qu'un petit tour par la FAQ du forum, rubrique «Encodage et internationalisation», pourrait t'aider?

Notamment: Comment bien déclarer l'encodage des caractères d'un document ?
Modifié par Florent V. (26 Oct 2007 - 14:33)
Le problème c'est que sa base n'est pas en UTF8, mais en UTF8 et en iso-8859-1 (seule la news la plus récente semble en utf8).
Donc à mon avis il y a quelque chose qui cloche oui, mais du côté de l'insertion. Il est donc inutile de chercher une solution côté extraction/affichage des données.

A vérifier:
-dans quel encodage sont postés les données dans le formulaire d'ajout de news.
-dans quel encodage les données arrivent à la requête SQL.
-dans quel encodage le serveur mysql écrit-il les données ?


Une fois la source du problème trouvée on pourra éventuellement trouver une solution, par contre convertire la dernière news en iso-8859-1 ne fera que reporter le problème à la prochaine.
Modifié par Necromantik (26 Oct 2007 - 14:50)
Necromantik a bien résumé la situation.

Sinon pour encoder mes données il y a la fonction utf8_encode();
Quand je l'applique au texte de mes news toutes les anciennes news marchent nickel, mais dans les nouvelles news, les caractères spéciaux sont de type "é".

Si je retire les le utf8_encode();, alors les nouvelles news s'affichent nickel, mais pas les anciennes.


D'ou le problème Smiley ohwell
Ben il va falloir normaliser un peu ta base de données (et les scripts qui y ajoutent des données, comme le dit Necromantik), si tu y as mélangé des données en ISO-8859-1 et d'autres données du même type (!) en UTF-8. Ou alors pour chaque bloc de données que tu reçois, tu testes voir si c'est de l'UTF-8 ou de l'ISO-8859-1 (pas évident à faire mais techniquement possible), et tu réencode si besoin.

Mais mieux vaut s'arranger pour avoir une base de données saine.