Problème de compatibilité export CSV sous Mac

Par Lythana, il y a 7 ans


Bonjour a tous,

Après plusieurs recherches sur divers forums, j'ai réussi à exporter des données de ma bdd mysql sur un fichier CSV. Quand je lance le script sur Windows via n'importe quel navigateur tout fonctionne, en effet lorsque l'utilisateur clique sur le lien qui renvoie à mon script export, il voit apparaître une boîte de dialogue qui lui propose de lire ou d'enregistrer le Csv.

Cependant, lorsque je réalise le test à partir d'un mac sous chrome mozilla ou safari, le fichier Csv apparaît directement sur le navigateur sans donner la possibilité à l'utilisateur de l'enregistrer et mes données ne sont pas affichées comme je l'aimerais (les accents ne sont pas reconnus et la plupart de mes séparateurs ne sont pas affichés).

1.J'ai fait des recherches sur d'autres forums, je pense que j'ai un problème d'encodage (le format est en UTF-8 )mais je ne sais pas lequel choisir ?

  1. Et je n'ai pas réussi à trouver la solution pour que mon script propose le téléchargement du fichier Csv sous mac ? et si ce n'est pas possible j'aimerais qu'il s'affiche au moins avec tous les séparateurs que j'ai ajouté.

Si une âme charitable veut bien m'aider, je t'en serait éternellement reconnaissante :)

Merci de votre aide !

Ce que je fais

Voici mon script export Csv

#connexion à la bdd try { $bdd = new PDO('mysql:host=localhost;dbname=', '',''); } catch (Exception $e) { die ('Erreur:' .$e->getMessage()); } #Création du CSV header("Content-Type: text/csv; charset=UTF-8"); header("Content-disposition: filename=dashboard.csv"); $separateur = ";"; $separateur2 = ";;"; #Tableau 1 Contributeur $Contributeurs = $bdd->prepare('SELECT Contributeur FROM contributeurs ORDER BY nb_ModifsPCI DESC LIMIT 7 ; '); #requête $Tableau = "Contributeurs"; #Titre Tableau $entete = array("Pseudo"); #Entêtes #Tableau 2 Articles - Modifies $MoinsModifs = $bdd->prepare('SELECT Titre, DateModif, Contributeur, NombreModifs, Commentaire FROM Articles ORDER BY NombreModifs LIMIT 10;'); $Tableau2= 'Articles - Modifiés'; #Titre tableau $entetes2 = array('Article', 'Date dernière modification', 'Commentaire', 'Contributeur'); #entetes #Tableau 3 Articles + Modifies $PlusModifs = $bdd->prepare('SELECT Titre, DateModif, Contributeur, NombreModifs, Commentaire FROM Articles ORDER BY NombreModifs DESC LIMIT 10;'); #Requete $Tableau3= 'Articles + Modifiés';#Titre tableau $entetes3 = array('Article', 'Date dernière modification', 'Commentaire', 'Contributeur');#entetes #Tableau 4 Articles + Consultes $PlusVues = $bdd->prepare('SELECT Titre, NombreVues FROM Articles ORDER BY NombreVues DESC LIMIT 10;'); #Requete $Tableau4= 'Articles + Consultés';#Titre tableau $entetes4 = array('Article', 'Nombres de vues');#entetes #Tableau 5 Articles - Consultes $MoinsVues = $bdd->prepare('SELECT Titre, NombreVues FROM Articles ORDER BY NombreVues LIMIT 10;'); #Requete $Tableau5= 'Articles - Consultés';#Titre tableau $entetes5 = array('Article', 'Nombres de vues');#entetes #Insertion du contenu #Tableau 1 echo ($separateur.$Tableau)."\r\n"; echo implode ($separateur,$entete)."\r\n"; $Contributeurs ->execute(array()); While ( $donnees=$Contributeurs -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd { // Création du contenu du tableau $lignes[] = array($donnees["Contributeur"]); } foreach ($lignes as $ligne) { echo implode ($separateur,$ligne)."\r\n"; } #Separateur echo $separateur2."\r\n" ; #Tableau 2 echo ($separateur.$Tableau2)."\r\n"; echo implode ($separateur,$entetes2)."\r\n"; $MoinsModifs -> execute(array()); While ( $donnees2=$MoinsModifs -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd { // Création du contenu du tableau $lignes2 []= array($donnees2["Titre"], $donnees2["DateModif"], $donnees2["Commentaire"], $donnees2["Contributeur"]); } foreach ($lignes2 as $ligne) { echo implode ($separateur,$ligne)."\r\n"; } #Separateur echo $separateur2."\r\n" ; #Tableau 3 echo ($separateur.$Tableau3)."\r\n"; echo implode ($separateur,$entetes3)."\r\n"; $PlusModifs -> execute(array()); While ( $donnees3=$PlusModifs -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd { // Création du contenu du tableau $lignes3 []= array($donnees3["Titre"], $donnees3["DateModif"], $donnees3["Commentaire"], $donnees3["Contributeur"]); } foreach ($lignes3 as $ligne) { echo implode ($separateur,$ligne)."\r\n"; } #Separateur echo $separateur2."\r\n" ; #Tableau 4 echo ($separateur.$Tableau4)."\r\n"; echo implode ($separateur,$entetes4)."\r\n"; $PlusVues -> execute(array()); While ( $donnees4=$PlusVues -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd { // Création du contenu du tableau $lignes4 []= array($donnees4["Titre"], $donnees4["NombreVues"]); } foreach ($lignes4 as $ligne) { echo implode ($separateur,$ligne)."\r\n"; } #Separateur echo $separateur2."\r\n" ; #Tableau 5 echo ($separateur.$Tableau5)."\r\n"; echo implode ($separateur,$entetes5)."\r\n"; $MoinsVues -> execute(array()); While ( $donnees5=$MoinsVues -> fetch()) # condition vérifant que les valeurs entrées sont conforment à celles de la bdd { // Création du contenu du tableau $lignes5 []= array($donnees5["Titre"], $donnees5["NombreVues"]); } foreach ($lignes5 as $ligne) { echo implode ($separateur,$ligne)."\r\n"; } ?>

Ce que je veux

Comme je vous l'ai dit au-dessus, j'aimerai générer une boite de dialogue sous mac afin de proposer à l'utilisateur de lire ou d'enregistrer le csv.Si ce n'est pas possible j'aimerais au moins que les tous les séparateurs apparaissent

Voila à quoi j'aimerai que ressemble mon csv sous mac
export

Ce que j'obtiens

Voila ce que j'obtiens sous mac/Chrome

exportmac

3 réponses

Huggy, il y a 7 ans

C'est un problème de type mime
le type text/css est affiché directement à l'écran (c'est Chrome qui décide)
Essaye en changeant le type mime par quelque chose qui n'est pas affichable ("application/zip" ...)

Pour les accents, il faut s'assurer de communiquer en UTF-8 avec la BD

$bdd = new PDO('mysql:host=localhost;dbname=xxxx; charset=utf8', 'root','secret');
Lythana, il y a 7 ans

Tout d'abord merci pour ta réponse , je vais essayer et je te tiens au courant :)

Lythana, il y a 7 ans

Coucou c'était pour te remercier, tout marche nickel ! Merci beaucoup :)