CSV à Mysql : probleme des accents sur les ma
KaTa_TaKa
Messages postés
58
Statut
Membre
-
jipé -
jipé -
Bonjour,
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 "<br><br>";
$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]."<br>");
//echo enlever($data[0])."<br>";
//echo addslashes($data[0])."<br>";
//echo $var."<br>".$data[0]."<br>";
//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"<br>";
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 "<b>Résultat de l'importation à partir de $dir :</b>";
print_r ($_SESSION['fichiersCSV']);
echo"<br>";
print_r ($_SESSION['tables']);
echo"<br>";
print_r ($_SESSION['Erreurs']);
echo"<br>";
?>
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 "<br><br>";
$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]."<br>");
//echo enlever($data[0])."<br>";
//echo addslashes($data[0])."<br>";
//echo $var."<br>".$data[0]."<br>";
//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"<br>";
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 "<b>Résultat de l'importation à partir de $dir :</b>";
print_r ($_SESSION['fichiersCSV']);
echo"<br>";
print_r ($_SESSION['tables']);
echo"<br>";
print_r ($_SESSION['Erreurs']);
echo"<br>";
?>
A voir également:
- CSV à Mysql : probleme des accents sur les ma
- Mysql community download - Télécharger - Bases de données
- Mysql a répondu : documentation connexion impossible : paramètres incorrects. - Forum Bases de données
- Nombre de colonnes invalides dans les données csv à la ligne 1 ✓ - Forum Webmastering
- Format spbm ou csv - Forum Téléphones & tablettes Android
- Convertir contacts .SPB en .CSV ou .TXT - Forum Mobile
7 réponses
Puisque ton script a l'air de bien marcher, il suffit de les rajouter ! Par exemple ( et j'en oublie ) :
D'autre part, je ne suis pas encore à l'aise avec les bases de données, mais si tu essayes un interclassement différent, tu n'auras peut-être plus ce problème.
Bon courage !
Edit : Voilà je viens de faire une série de tests avec 12 interclassements différents, voici lesquels enregistrent correctement la chaîne 'ÇËÊÄÂçàáâãäåòóôõöøéèêëìíîïùúûüÿ' :
utf8_bin
utf8_general_ci
utf8_unicode_ci
latin1_bin
latin1_general_ci
latin1_general_cs
latin5_bin
Ceux qui ne supportent pas ( parmi les 12 testés ):
latin2_bin
latin2_general_ci
latin7_bin
latin7_general_ci
latin7_general_cs
Après avoir testé j'ai d'ailleurs découvert une liste explicative de ces encodages : latin1 pour l'Europe de l'Ouest, latin2 pour l'Europe centrale ( Croatie etc. ), latin5 pour le Turc et latin7 pour le Baltique. utf8 est universel mais la plupart de ses caractères ne servent pas en français.
$acc='ÇËÊÄÂçàáâãäåòóôõöøéèêëìíîïùúûüÿ'; $noacc='CEEAAcaaaaaaooooooeeeeiiiiuuuuy';
D'autre part, je ne suis pas encore à l'aise avec les bases de données, mais si tu essayes un interclassement différent, tu n'auras peut-être plus ce problème.
Bon courage !
Edit : Voilà je viens de faire une série de tests avec 12 interclassements différents, voici lesquels enregistrent correctement la chaîne 'ÇËÊÄÂçàáâãäåòóôõöøéèêëìíîïùúûüÿ' :
utf8_bin
utf8_general_ci
utf8_unicode_ci
latin1_bin
latin1_general_ci
latin1_general_cs
latin5_bin
Ceux qui ne supportent pas ( parmi les 12 testés ):
latin2_bin
latin2_general_ci
latin7_bin
latin7_general_ci
latin7_general_cs
Après avoir testé j'ai d'ailleurs découvert une liste explicative de ces encodages : latin1 pour l'Europe de l'Ouest, latin2 pour l'Europe centrale ( Croatie etc. ), latin5 pour le Turc et latin7 pour le Baltique. utf8 est universel mais la plupart de ses caractères ne servent pas en français.
Bonjour,
je n'ai pas le courage de regarder ton script en entier ( d'ailleurs si tu dis qu'il marche sur les minuscules... ), mais je vois déjà un truc :
Il reste un accent. Bizarre, non ?
je n'ai pas le courage de regarder ton script en entier ( d'ailleurs si tu dis qu'il marche sur les minuscules... ), mais je vois déjà un truc :
$noacc='Âaaaaaaooooooeeeeiiiiuuuuy';
Il reste un accent. Bizarre, non ?
Haha pardon, je pensais que c'était évident. Essaye en suprimant l'accent sur le A dans la chaîne $noacc :D
Pour l'instant ce qui se passe avec ton script c'est que quand il voit un "Â", il le remplace par un "Â", c'est pas très efficace ^^
Tiens-moi au courant.
Pour l'instant ce qui se passe avec ton script c'est que quand il voit un "Â", il le remplace par un "Â", c'est pas très efficace ^^
Tiens-moi au courant.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
salut !!!
LOL c vrai je suis d'accord avec toi ça sert à rien mdr ....
mais bon j'ai deja testé ce que tu m'as dis mais ça marche pas, chaque fois j'ai une majuscule avec un accent elle la supprime directe, n'y a pas que "Â", mais d'autre lettre dans ma base de donnée par ex "Ë"
THX
LOL c vrai je suis d'accord avec toi ça sert à rien mdr ....
mais bon j'ai deja testé ce que tu m'as dis mais ça marche pas, chaque fois j'ai une majuscule avec un accent elle la supprime directe, n'y a pas que "Â", mais d'autre lettre dans ma base de donnée par ex "Ë"
THX