CSV à Mysql : probleme des accents sur les majuscules

kataVB Messages postés 31 Date d'inscription dimanche 18 novembre 2007 Statut Membre Dernière intervention 11 décembre 2009 - 12 août 2008 à 12:10
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 - 12 août 2008 à 12:51
boujour tout le monde

boujour tout le monde
Pour un site j'ai eu besoin de faire un petit script pour importer des fichies csv vers une table Mysql.

le script marche bien, ça n'affiche aucun erreur, et en plus j'ai fait
attention aux accent et j'ai pas de souci sauf pour les accents sur les majuscules : "Â","Ë", ... je ne
comprends pas prq ça marche pas pour les majuscules ... dans ma base de
donnée le  est supprimé.
Ex : dans mon fichier csv j'ai " Âme ",
après l'exécution de mon script le mot devient "me" et ça s'enregistre
comme ça dans ma base de donné.
voila voila j'ai regardé sur plein
de forum, ça parle sur les autres accents mais pas les accents sur les majuscules, donc si vous
avez une solution je serais très reconnaissant, merci d'avance.

je vous passe mon script aussi si vous voulez jeter un coup d'oeil, et si vous avez des remarques seront les bienvenues, merci d'avance

<?php
//Se connecter à Mysql 
include 'sql/connection.php';

//Démarrer une session 

//Début.
//Initialisations 
$_SESSION['fichiersCSV'] = null; 
$_SESSION['tables'] = null; 
$_SESSION["Erreurs"] = null; 
function NoAccent($texte)
{
$acc='Âàáâãäåòóôõöøéèêëìíîïùúûüÿ';
$noacc='Âaaaaaaooooooeeeeiiiiuuuuy';
$texte = strtr($texte,$acc,$noacc);
return $texte;
}
function enlever($text)
{
$liste = array(' ','-','_',')','(',']','[',':',',','!',"'",'/','?',',');
$text=str_replace($liste,'',$text);
$text=str_replace('$','s',$text);
$text=strtolower($text);
$text=NoAccent($text);
return $text;
}
//Dossier de travail contenant les fichiers CSV   
$dir= "csv/";
//Extraire la liste des fichiers dans le dossier de travail 
$dh  = opendir($dir); while (false !($fichier readdir($dh))) {           
        //Ne traiter que les fichiers 
        if (!is_file("$dir/$fichier")) continue; //reboucle 
        $_SESSION['fichiersCSV'][] = $fichier;
        //Déterminer le nom de la table à partir de celui du fichier 
        $nomTable = explode(".", $fichier); //Sépare le nom de l'extension du fichier
        $nomTable = str_replace('-', '_', $nomTable[0]); //reformate le nom 
        $_SESSION['tables'][] = $nomTable; //stock le nom dans la session 
        //Créer la table si n'existe pas 
        $supprimerTable = "DROP TABLE `$nomTable` ";
        if (! @mysql_query($supprimerTable, $connexion))
        {
        $_SESSION["Erreurs"][] ='Erreur suppression de la table ' . $nomTable. " (".mysql_error().")";
        }
        $creerTable = " 
        CREATE TABLE IF NOT EXISTS `$nomTable` ( 
               
            `id` INT( 100 ) NOT NULL AUTO_INCREMENT ,
            `titre` VARCHAR( 200 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
            `lien` VARCHAR( 200 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL ,
            PRIMARY KEY ( `id` )            
            )"; 
        if (! @mysql_query($creerTable, $connexion))  
            $_SESSION["Erreurs"][] ='Erreur Création de la table ' . $nomTable. " (".mysql_error().")"; 
         
        //Effectuer l'importation de données dans la table 
       
        //echo "

";
        $fichier_csv_ouvert = @fopen ("$dir/test.csv", "r"); //ouverture csv en lecture 
        if ( !$fichier_csv_ouvert)  
            $_SESSION["Erreurs"][] ='Erreur Import dans la tables ' . $nomTable . " (Erreur de lecture du fichier CSV)"; 
        // 
        $valeurs_import = array(); //liste des valeurs pour la requête SQL INSERT 
      
       //Lecture CSV 

        $var =0;
        while ($data = @fgetcsv($fichier_csv_ouvert, 10000, ";")) //lire toute une ligne csv 
        {
       
        //echo utf8_encode($data[0]."
");
        //echo enlever($data[0])."
";
        //echo addslashes($data[0])."
";
        //echo $var."
".$data[0]."
";
            //Format d'une ligne Values pour SQL INSERT  
       
            $valeurs_import[] = "('".addslashes($data[0])."','"."ser_".enlever($data[0]).".html"."')";
        }
       
        //SQL INSERT étendu 
       
        /*or ($i=0;$i<=count($valeurs_import);$i++)
        {
        echo"
";
        echo $valeurs_import[$i];
        }*/
       
        //echo count($valeurs_import);
       
        if (count($valeurs_import)>0) 
        { 
       
            //Import 
            $import = "INSERT INTO `$nomTable` (`titre`,`lien`)  
                        VALUES " . implode(",",$valeurs_import); 
               if (! @mysql_query($import, $connexion))  
                $_SESSION["Erreurs"][] ='Erreur Import dans la table ' . $nomTable . " (".mysql_error().")";
            //echo $import;
        } 
        else $_SESSION["Erreurs"][] ='Erreur Import dans la tables ' . $nomTable . " (Fichier CSV vide)";

       
        @fclose ($fichier_csv_ouvert); //fin d'usage du fichier csv 


//Debug 
echo "Résultat de l'importation à partir de $dir :"; 
print_r ($_SESSION['fichiersCSV']); 
echo"
";
print_r ($_SESSION['tables']); 
echo"
";
print_r ($_SESSION['Erreurs']); 
echo"
";

?>

1 réponse

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
12 août 2008 à 12:51
Salut,

tu pouvais aussi continuer à poster sur le sujet où tu as posé la question la première fois...

Bref je vais peut-être me répéter, mais as-tu mis SET NAMES UTF8 au moment de ta connexion à la base de données, est-ce que l'encodage de ton fichier php est bien utf8 (à vérifier dans ton éditeur de texte), et est-ce que tu as bien mis le header utf8 dans la page envoyée au navigateur ?

PS: tu peux demander plus d'explication si tu ne comprends pas ce que je dis mais évite de reposer la question comme si je n'avais rien dit
0
Rejoignez-nous