[Terminé] Encodage: latin1, ISO et CP1252

Problèmes, bugs et difficultés rencontrés sur le site.
Avatar du membre
Dominique
Messages : 3704
Enregistré le : 08 avr. 2006, 21:58

Message par Dominique »

sly a écrit :si quelqu'un veut se lancer dans un analyse, le dump de la base est disponible et je peux vous en donner une copie en privée pour analyse

(les mots de passe forum sont hachés donc je ne m'inquiètes pas trop, mais on y trouve tous les emails des membres, je préfère donc opter pour la non publication et je compte sur vous pour une utilisation "technique" de cette base)
Trop tard :twisted:

j'ai fait une stat sur les tables commentaires, points & phpbb_posts_text
Je trouve (caractères non ISO-8859-1):
422 € (Alt+0128)
2 „ (Alt+0132)
244 … (Alt+0133)
2 Š (Alt+0138)
2 Œ (Alt+0140)
2 ‘ (Alt+0145)
2860 ’ (Alt+0146)
4 “ (Alt+0147)
2 ” (Alt+0148)
23 • (Alt+0149)
54 – (Alt+0150)
4 — (Alt+0151)
3 š (Alt+0154)
43 œ (Alt+0156)
3 Ÿ (Alt+0159)
158 (Alt+0160)
2 ­ (Alt+0173)

A noter le caractère (Alt+0160) qui est envoyé comme  
Exemple: http://www.refuges.info/point/1929#C11315 entre "brule du bois pour rien" et l'! qui suit !

Le (Alt+0173) correspond à un -

Remarque: pas la peine de se creuser la tête: PHP iconv("ISO-8859-1", "UTF-8", $chaine) convertit tout ça très correctement en UTF-8 (même les hors specs !, sauf les Alt+0160 et Alt+0173)
ybob a écrit :Si elle est clean (en latin1_swedish s'entends), la conversion se résume à un simple "ALTER TABLE", MySQL faisant tout seul la conversion vers UTF8.
J'ai vérifié, ça change la valeur de l'interclassement, mais ne touche pas au contenu de la table
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

Dominique a écrit : Remarque: pas la peine de se creuser la tête: PHP iconv("ISO-8859-1", "UTF-8", $chaine) convertit tout ça très correctement en UTF-8 (même les hors specs !, sauf les Alt+0160 et Alt+0173)
Ok pour un iconv en php (j'allais utiliser celui à la ligne de commande linux) mais comment faire pour parcourir tous les champs de toutes les tables ? un peu relou non ?
Avatar du membre
Dominique
Messages : 3704
Enregistré le : 08 avr. 2006, 21:58

Message par Dominique »

sly a écrit :Ok pour un iconv en php (j'allais utiliser celui à la ligne de commande linux) mais comment faire pour parcourir tous les champs de toutes les tables ? un peu relou non ?
Très:
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
Avatar du membre
Dominique
Messages : 3704
Enregistré le : 08 avr. 2006, 21:58

Message par Dominique »

Un gros doute: je m’aperçois que l'export SQL m'a donné un UTF-8 sans BOM
J'ai donc fait mes stats ... sur un fichier UTF ! :calimero:
Et MySql visualise dans une page en UTF-8
Alors .... qu'y a t'il réellement dans la base ?
Décidément, pas si simple
Modifié en dernier par Dominique le 06 févr. 2013, 22:38, modifié 1 fois.
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

Vu que chacun semble bosser de son coté ;-)

Voici mes résultats :
http://refuges.letuffe.org/

Tout a été fait avec iconv en ligne de commande
iconv pour tous les fichiers html/php/txt du site (en récursif)
iconv pour un dump de la base exporté et ré-importé

Changement du charset renvoyé pour devenir UTF-8

Je n'ai rien touché d'autre, il s'agit donc du jeu des erreurs a trouver et voir si cette méthode est ou non viable et si je dois continuer ou non sur cette voie.

Les statistiques fourni par dominique devraient être intéressant pour aller directement dans la zone concernée afin de voir ce que ça a donné
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

Dominique a écrit :Un gros doute: je m’aperçois que l'export SQL m'a donné un UTF-8 sans BOM
Ha ben tu as fais ça comment ? puisque c'est justement ce qu'on cherche à faire ;-)
Alors .... qu'y a t'il réellement dans la base ?
de tout ?

à noter que les tables osm_* sont bien en UTF-8, il faut donc les exclures de la conversion
Modifié en dernier par sly le 06 févr. 2013, 23:00, modifié 1 fois.
Avatar du membre
Dominique
Messages : 3704
Enregistré le : 08 avr. 2006, 21:58

Message par Dominique »

sly a écrit :il s'agit donc du jeu des erreurs a trouver et voir si cette méthode est ou non viable et si je dois continuer ou non sur cette voie.
Bof:
http://refuges.letuffe.org/point/1929#C11315
Erreur 404 - La page demandée est introuvable sur refuges.info
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

Dominique a écrit : Bof:
http://refuges.letuffe.org/point/1929#C11315
Erreur 404 - La page demandée est introuvable sur refuges.info
Manquait l'option Multiviews sur mon serveur de test

La page... "marche" maintenant et révèle donc que la conversion vers UTF8 n'a semble-t-il été que partielle
ybob

Message par ybob »

sly a écrit :Vu que chacun semble bosser de son coté ;-)
Je n'ai rien touché d'autre, il s'agit donc du jeu des erreurs a trouver et voir si cette méthode est ou non viable et si je dois continuer ou non sur cette voie.
Le charset associé de la table et des columns est donc encore latin1 , avec de l'UTF8 dedans ?
sly a écrit : La page... "marche" maintenant et révèle donc que la conversion vers UTF8 n'a semble-t-il été que partielle
Si rien d'autre a été modifié, il y a de bonne chance que les requêtes mysql/php continuent a travailler en ISO, ainsi que le Header renvoyé (du protocole HTTP, en plus de celui du HTML)

il y a un bon lien sur le site du zero qui couvre tout le bazar sattellite autour de MySQL:
http://www.siteduzero.com/informatique/ ... -l-unicode

Oh et puis [censuré], si tout le monde bosse, je devrais m'y mettre aussi. vous acceptez encore les revenants ? même des années après ?
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

ybob a écrit :
sly a écrit :Vu que chacun semble bosser de son coté ;-)
Je n'ai rien touché d'autre, il s'agit donc du jeu des erreurs a trouver et voir si cette méthode est ou non viable et si je dois continuer ou non sur cette voie.
Le charset associé de la table et des columns est donc encore latin1 , avec de l'UTF8 dedans ?
Disons que j'ai tenté plein de truc et que j'ai l'impression que plusieurs phénomène se télescopent...

J'ai utilisé mysqldump pour récupérer une copie de la base que j'imaginais donc être en iso, je l'ai converti par iconv et voilà-t-il pas que je me retrouve avec un double encodage UTF-8 (en gros je me retrouve avec ça : "Refuge rentré hélas un peu rapidement" alors que ma page est bien déclarée en utf-8)

Je creuse la doc et je vois que mon dump est en fait en utf8 ! Et ça semble être une fourberie de mysqldump lié à une locale de mon linux.
Z'y va alors, je récupère mon dump, je change toutes les occurences de CHARSET=latin1 en CHARSET=utf8 et zou.

Et paf, presque, mais pas tout à fait. Mes tables ont un interclassement "utf8_general_ci", avec phpmyadmin tout roule et s'affiche bien, mais sur ma copie du site j'ai une partie seulement qui s'affiche convenablement, et aller savoir pourquoi, le contenu en provenance de certaines tables foire dans la colle... misère

Là, ton idée du "SET NAMES UTF-8" semble d'importance, car si je l'active juste après tous les mysql_connect, ça inverse tout, ce qui s'affichait bien s'affiche mal, et ce qui s'affichait mal s'affiche bien.

Argh ! En général, quand c'est comme ça, c'est qu'une partie n'a pas l'encodage de l'autre partie. Mais pourtant, pourtant si j'ouvre mon fichier sql, tout semble en utf-8 (moins toutefois par ci par là des signe euros et des caractères qui n'ont semble-t-il pas pû être converti en utf8)
Est-ce que par la simple présence de ces caractères foireux par endroit seulement, mysql refuse d'activer mon "SET NAMES UTF-8" sur les tables qui en contiennent ? possible...
sly a écrit : La page... "marche" maintenant et révèle donc que la conversion vers UTF8 n'a semble-t-il été que partielle
Si rien d'autre a été modifié, il y a de bonne chance que les requêtes mysql/php continuent a travailler en ISO, ainsi que le Header renvoyé (du protocole HTTP, en plus de celui du HTML)
L'en-tête http (vérifié avec wget -S) est bon, il reste des reliques dans le HTML par endroit, mais que je les laissent ou les enlèves, ça ne change rien, j'imagine que l'en-tête "Content-Type: text/html; charset=UTF-8" prend le dessus.

Par contre, l'hypothèse que php continuer à communiquer en iso, parfois, semble la bonne piste, pourtant je fais la même chose qu'elles que soient les tables.
Retour donc à mon hypothèse qui serait que parce qu'une table contient du "caca" le passage en utf8 de l'interconnexion php<->mysql n'ai pas prise en compte.

Je vais creuser et je vais tenter la bonne vielle technique du : je vide tout sauf un enregistrement, je test, j'en ajoute un autre, je test et je vois à partir de quel moment ça foire
Oh et puis [censuré], si tout le monde bosse, je devrais m'y mettre aussi. vous acceptez encore les revenants ? même des années après ?
Ké revenant ?
On accepte tout le monde, les humains, les revenants, les zombies, les martiens, les jaunes, les bleus, les chiens et les chats ! du moment que quelqu'un veut nous prêter main forte il est le bienvenu, refuges.info est un projet libre ouvert à tout le monde !

Je peux te passer une copie complète du code + dump de la base si tu veux tenter, no problèmes.

Ta phrase doit cacher quelque chose mais j'ignore quoi.

Mmmm "ybob" ? quelqu'un qu'on est censé connaître ?
Un lien de parenté avec le mercenaire Bob Denard ? (ne le prend pas mal, c'est une forme de blague, mais si tu comprends la feinte, alors j'ai deviné, sinon, je donne ma langue à un dromadaire marocain)
Avatar du membre
Dominique
Messages : 3704
Enregistré le : 08 avr. 2006, 21:58

Message par Dominique »

sly a écrit :On accepte tout le monde, les humains, les revenants, les zombies, les martiens, les jaunes, les bleus, les chiens et les chats !
:ours: :?:
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

Dominique a écrit :
sly a écrit :On accepte tout le monde, les humains, les revenants, les zombies, les martiens, les jaunes, les bleus, les chiens et les chats !
:ours: :?:
Les ours aussi bien sûr ;-)

Dans ma quête de conversion, je découvre aussi que phpBB risque bien de ne pas se laisser faire aussi simplement. Les fichiers de templates français (qui dispose évidement d'accents en tout genre) sont encodés en ISO-8859-1 et dispose d'un en-tête de fichier étrange indiquant :
Charset: iso-8859-1

Je ne sais pas dans quel mesure phpBB s'en sert pour faire, ou non, des conversions à la volée vers utf8 et si un simple remplacement par "Charset: utf8" peut être envisageable

Voici mes notes de ce que j'ai fais pour l'instant :

Code : Tout sélectionner

sur serveur actuel &#58;
mysqldump refuges -u refuges -pxxxx -h sql4.gplservice.fr > ref.sql

joe ref.sql -> replace latin1 -> utf8

delete all tables de ma copie

re-import &#58;
cat ref.sql | mysql -pxxxxx -u root refuges

conversion fichiers eux-même &#58;

find . -name "*.html" -exec iconv -f ISO-8859-1 -t UTF8 &#123;&#125; -o &#123;&#125;.tmp \; -exec mv &#123;&#125;.tmp &#123;&#125; \;
find . -name "*.php" -exec iconv -f ISO-8859-1 -t UTF8 &#123;&#125; -o &#123;&#125;.tmp \; -exec mv &#123;&#125;.tmp &#123;&#125; \;
find . -name "*.js" -exec iconv -f ISO-8859-1 -t UTF8 &#123;&#125; -o &#123;&#125;.tmp \; -exec mv &#123;&#125;.tmp &#123;&#125; \;
find . -name "*.txt" -exec iconv -f ISO-8859-1 -t UTF8 &#123;&#125; -o &#123;&#125;.tmp \; -exec mv &#123;&#125;.tmp &#123;&#125; \;

?? &#58;
find . -name "*.tpl" -exec iconv -f ISO-8859-1 -t UTF8 &#123;&#125; -o &#123;&#125;.tmp \; -exec mv &#123;&#125;.tmp &#123;&#125; \;

.htaccess &#58;
AddDefaultCharset UTF-8

ISO-8859-1 -> UTF-8 dans le code sur plusieurs en-tête html/xml/gpx &#40;ou carrément les supprimer car inutile pour les fichiers html&#41;

Ré-importer openstreetmap &#40;hotel et tout le basard&#41; pour remettre ces tables
en utf-8
Avatar du membre
Claude Mauguier
Messages : 4233
Enregistré le : 16 févr. 2005, 01:00
Localisation : Isére

Message par Claude Mauguier »

Dominique a écrit : :ours: :?:
Heu, les ours ont un langage basé sur la dimension et le poids des pattes, ça risque de faire désordre dans les hiéroglyphes qu'on brasse dans ce fil. A part ce détail, je me demande si l'étalage public de vos manips ne risque pas d'inspirer quelques malveillants...(un des défauts majeurs de l'ours étant la méfiance systématique) ? Ne ferait-on pas mieux de transférer le tout dans la partie "pour les intimes" du forum (en y incluant ybob, l'inconnu célèbre puisque revenant, en tant que modérateur à part entière) :?:
Deuxième remarque (j'ai pas l'air, mais je suis attentivement la discussion), si certains explorateurs "envoient des merdes", ne serait-il pas judicieux de mettre :
- soit des sortes de "pare-feux" filtrant et convertissant les dites merdes en trucs buvables
- soit un avertissement aux utilisateurs sur l'inconvénient de tel ou tel explorateur
... :?:
Avatar du membre
sly
Messages : 5041
Enregistré le : 29 févr. 2004, 17:59
Localisation : Chambéry - Savoie

Message par sly »

Claude Mauguier a écrit : A part ce détail, je me demande si l'étalage public de vos manips ne risque pas d'inspirer quelques malveillants...
Te biles pas, si un gugus vient jouer les troublions et tente de nous faire des crasses, on lâche les ours pour lui voler dans les poils, et il aura comme punition de redescendre les poubelles de tous les refuges des alpes. Ça sera d'utilité publique et on peut supposer que ça lui passera le goût de recommencer.

Mais en plus sérieux, le code informatique de refuges.info est libre de ré-utilisation et visualisation, donc celui qui le veut, on lui file, donc rien à cacher. Et si il trouve un bug grave, ben au moins, ça nous poussera à le corriger ;-)

Notes que je n'ai pas non plus diffusé des mots de passes, je reste toutefois un brin prudent quand même, ça devrait donc êtres assez difficile de venir nous chercher des noises
Avatar du membre
Dominique
Messages : 3704
Enregistré le : 08 avr. 2006, 21:58

Message par Dominique »

Claude Mauguier a écrit :si certains explorateurs "envoient des merdes", ne serait-il pas judicieux de mettre :
- soit des sortes de "pare-feux" filtrant et convertissant les dites merdes en trucs buvables
- soit ...
C'est pourquoi on veut passer en UTF-8, plus standard actuellement