Fork me on GitHub




(1) 2 »


conversion charset base de données
Semi pro
Inscrit: 25/08/2005 22:51
De Aix les bains
Messages: 1270
Bonjour

J'ai un site (www.68hc08.net) en exploitation depuis 2006 sous XOOPS 2.0.18.

Je tente de le reconstruire de toute pièce sur un sous domaine (www.test.68hc08.net) avec xoops 2.5.1
Pour le moment je transfert du contenu (smartsection, smartFAQ, les utilisateurs...) et je butte sur les accents.

La base de donnée contient bien la même chose que sur le site en exploitation (les données sont bien transférées) mais tous les contenus qui ont au moins 1 accent ne sont pas affichés ! (exemples flagrants sur smartfaq et le forum)

J'ai vu que le site en exploitation est en ISO-8859-1 et le nouveau était par défaut en UTF-8 mais si je passe le nouveau en ISO ca ne change rien (a part des caractères étranges en plus de partout)... J'ai l'impression d'avoir essayé toutes les config possible dans phpmyadmin et bigdump...bref, je sèche et surtout je ne trouve rien qui parle de "pas d'affichage du contenu", je ne trouve que des articles qui parlent de "caractères étranges"

Merci par avance pour votre aiguillage

Posté le : 25/04/2011 11:33

Edité par Kris sur 26/04/2011 18:50:44

Mieux vaut marcher dans la bonne direction que courir dans la mauvaise.
----------------------------------------
www.68hc08.net la communauté francophone.
www.avironroannelecoteau.net (créé mais plus exploité)
Partager Twitter Partagez cette article sur GG+
Re: accents à sang
Supporter Xoops
Inscrit: 09/01/2005 13:37
De Breizh
Messages: 16972
Bonjour,

La solution était, en local, de convertir ton ancienne base au format utf-8 puis de transférer ensuite ces données sur ton nouveau site

Un script à adapter pour convertir ta base de données en utf8
<?php
/******************************************************************************/
/*                                                                            */
/*                       __        ____                                       */
/*                 ___  / /  ___  / __/__  __ _____________ ___               */
/*                / _ / _ / _ _ / _ / // / __/ __/ -_|_-<               */
/*               / .__/_//_/ .__/___/___/_,_/_/  __/__/___/               */
/*              /_/       /_/                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*                                                                            */
/* Titre          : Code pour convertir dans un format Latin ou UTF8          */
/*                                                                            */
/* URL            : http://www.phpsources.org/scripts299- ... ;    */
/* Auteur         : nixi54                                                    */
/* Date édition   : 29 Jan 2008                                               */
/*                                                                            */
/******************************************************************************/

// http://www.phpsources.org/scripts299-MySQL.htm
 
die("faite un backup de votre database MySQL et enlever cette ligne");
 
set_time_limit(0);
 
// format de départ:
$convert_from 'latin1_swedish_ci';
 
// Le format d'arrivée:
$convert_to   'utf8_general_ci';
 
// Initialiser les caracteres dans le bon format:
$character_set'utf8';
 
$show_alter_table true;
$show_alter_field true;
 
// DB logs information
$username 'user';
$password 'pass';
$database 'base';
$host     'localhost';
 
mysql_connect($host$username$password);
mysql_select_db($database);
 
$rs_tables mysql_query(" SHOW TABLES ") or die(mysql_error());
 
echo 
'<pre>';
while (
$row_tables mysql_fetch_row($rs_tables)) {
    
$table mysql_real_escape_string($row_tables[0]);
    

    
// ALTER TABLE 'compte' DEFAULT CHARACTER SET utf8
    
if ($show_alter_table) {
        echo(
"ALTER TABLE '$table' DEFAULT CHARACTER SET $character_set;rn");
    }
 
    
$rs mysql_query(" SHOW FULL FIELDS FROM '$table' ") or die(mysql_error());
    while (
$row=mysql_fetch_assoc($rs)) {
        
        if (
$row['Collation']!=$convert_from)
            continue;
 
        
// le champ peut-etre null?
        
if ($row['Null']=='YES') {
            
$nullable ' NULL ';
        } else {
            
$nullable ' NOT NULL';
        }
 
        
// est-ce que les champs Default sont nul, une chaine, ou rien?
        
if ($row['Default']==NULL) {
            
$default " DEFAULT NULL";
        } else if (
$row['Default']!='') {
            
$default " DEFAULT '".mysql_real_escape_string($row['Default'])."'";
        } else {
            
$default '';
        }
 
        
// ALTER TABLE 'compte' CHANGE 'email' 'email' VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
        
if ($show_alter_field) {
            
$field mysql_real_escape_string($row['Field']);
            echo 
"ALTER TABLE '$table' CHANGE '$field' '$field$row[Type] CHARACTER SET $character_set COLLATE $convert_to $nullable $default; rn";
        }
    }
}
 
?>

ensuite, s'il te reste des caractères "bizarres", table par table et colonne par colonne, passer ces requêtes sql en l'adaptant - c'est ce que j'ai fais sur frxoops
/******* iso vers utf8 *******/
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'‘','’');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'°','°');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'á','á');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'â','â');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ã','ã');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ä','ä');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'Ã¥','å');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'æ','æ');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ç','ç');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'é','é');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'è','è');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ê','ê');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ë','ë');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ì','ì');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'î','î');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ï','ï');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ð','ð');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ñ','ñ');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ò','ò');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ó','ó');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ô','ô');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'õ','õ');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ö','ö');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ù','ù');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ú','ú');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'û','û');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ü','ü');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'ý','ý');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'à','à');
update nomdelatable set nomdelacolonne replace(nomdelacolonne,'Ã' ,'í');

Posté le : 25/04/2011 11:40

La connaissance s'accroît quand on la partage ...
Partager Twitter Partagez cette article sur GG+
Re: accents à sang
Semi pro
Inscrit: 25/08/2005 22:51
De Aix les bains
Messages: 1270
j'ai importé en local le contenu de ma base et lancé ce script

ca me dit une méchanceté que je ne comprends pas :
Citation :
ALTER TABLE 'a2_avatar' DEFAULT CHARACTER SET utf8;rnYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''a2_avatar'' at line 1


J'ai paramétré ainsi le script
// format de départ:
$convert_from 'ISO-8859-1';
 
// Le format d'arrivée:
$convert_to   'utf8_general_ci';
 
// Initialiser les caracteres dans le bon format:
$character_set'utf8';


Merci

Posté le : 25/04/2011 13:02

Mieux vaut marcher dans la bonne direction que courir dans la mauvaise.
----------------------------------------
www.68hc08.net la communauté francophone.
www.avironroannelecoteau.net (créé mais plus exploité)
Partager Twitter Partagez cette article sur GG+
Re: accents à sang
Semi pro
Inscrit: 25/08/2005 22:51
De Aix les bains
Messages: 1270
faute d'arriver à faire tourner ce script j'ai tenté un changement de format (passage en utf8) à l'aide de notepad++

mais après ca je n'arrive plus à importer sur ma base le fichier sql avec bigdump...
Error at the line 27DROP TABLE IF EXISTS `a2_bb_archive`;

Query-- phpMyAdmin SQL Dump
--
--
--
--
--
DROP TABLE IF EXISTS `a2_bb_archive`;

MySQLYou have an error in your SQL syntaxCheck the manual that corresponds to your MySQL server version for the right syntax to use near '-- phpMyAdmin SQL Dump -- -- -- -- -- DROP TABLE IF EXISTS `



Posté le : 25/04/2011 16:21

Mieux vaut marcher dans la bonne direction que courir dans la mauvaise.
----------------------------------------
www.68hc08.net la communauté francophone.
www.avironroannelecoteau.net (créé mais plus exploité)
Partager Twitter Partagez cette article sur GG+
Re: accents à sang
Team FrXoops
Inscrit: 07/08/2006 13:03
Messages: 1737
Salut,
Le souci, c'est que tu as modifié des caratères qui ne devraient pas l'être, avec cette méthode :

--

Posté le : 25/04/2011 17:45
Partager Twitter Partagez cette article sur GG+
Re: accents à sang
Semi pro
Inscrit: 25/08/2005 22:51
De Aix les bains
Messages: 1270
Il me semble avoir vaincu !! ??

Je détaille ce que j'ai fait, ca me servira aussi de pense bête :

1)j'ai exporté depuis phpmyadmin mes tables (sans cocher "insertion étendues", sinon bigdump fonctionnera pas). Ca m'a donné un fichier baseISO.sql
2) avec wordpad j'ai remplacé le préfixe de mes tables (pour export vers un autre site qui en a besoin)
3) avec wordpad j'ai remplacé tous les TYPE=MyISAM par des ENGINE=MyISAM (il me semble que c'est pour le PHP5 du site vers lequel je veux tout transféré, bref il faut le faire...)

4)télécharger et installer ICONV pour windows ici
http://gnuwin32.sourceforge.net/packages/libiconv.htm

5)copier baseISO.sql dans le dossier ou se trouve iconv.exe (dossier d'installation)
6)ouvrir l'invité de commande MSDOS
7)pointer sur le repertoire où se trouve iconv.exe

8)taper la commande
iconv.exe -f iso-8859-1 -t utf-8 baseISO.sql > baseUTF8.sql

9)on obtient le fichier baseUTF8.sql que j'ai transféré sur la base de mon site à l'aide de bigdump

et le pieu sort de dessous le pieds...

Posté le : 25/04/2011 20:01

Mieux vaut marcher dans la bonne direction que courir dans la mauvaise.
----------------------------------------
www.68hc08.net la communauté francophone.
www.avironroannelecoteau.net (créé mais plus exploité)
Partager Twitter Partagez cette article sur GG+
Re: conversion charset base de données
Team FrXoops
Inscrit: 07/08/2006 13:03
Messages: 1737
Tres interessant.
Profites en pour verifier, dans ton php myadmin que les table sont bien referencée en utf8

Posté le : 26/04/2011 19:48
Partager Twitter Partagez cette article sur GG+
Re: conversion charset base de données
Team FrXoops
Inscrit: 24/11/2008 00:42
De Argenteuil
Messages: 987
Bonsoir,

Pour l'encodage il y a également ce script:
Script d'encodage de fichiers par lot

Posté le : 26/04/2011 22:13
Partager Twitter Partagez cette article sur GG+
Re: conversion charset base de données
Semi pro
Inscrit: 25/08/2005 22:51
De Aix les bains
Messages: 1270
Citation :
Grom a écrit :
Tres interessant.
Profites en pour verifier, dans ton php myadmin que les table sont bien referencée en utf8


Vérifier sur le nouveau site que les tables ont bien été passées officiellement en utf8 ?
Ce serait quoi le problème si ce n'était pas le cas ?

Posté le : 26/04/2011 22:34

Mieux vaut marcher dans la bonne direction que courir dans la mauvaise.
----------------------------------------
www.68hc08.net la communauté francophone.
www.avironroannelecoteau.net (créé mais plus exploité)
Partager Twitter Partagez cette article sur GG+
Re: conversion charset base de données
Team FrXoops
Inscrit: 24/11/2008 00:42
De Argenteuil
Messages: 987
Bonjour,

Citation :
petitours a écrit :
Vérifier sur le nouveau site que les tables ont bien été passées officiellement en utf8 ?
Ce serait quoi le problème si ce n'était pas le cas ?


Si l'interclassement de tes tables est en latin1_swedish_ci dans ta BDD, tu vas forcément avoir des problèmes d'encodage avec tes fichiers que tu as convertis en utf8.

Tout doit être en utf8 ou en iso(latin1)!
Attention, si le site est en ISO, l'nterclassement pour la connexion MySQL doit être en utf8_general_ci.

Posté le : 27/04/2011 07:55
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
(1) 2 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

32 Personne(s) en ligne (25 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 32 | Plus ...