IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

CSV à PHP - Accents


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 43
    Par défaut CSV à PHP - Accents
    Bonjour, avant tout je tiens à dire que j'ai cherché sur google, sur ce forum des solutions mais qu'à mon avis je suis passé à côté de quelque chose...

    Le principe est simple, j'ai un fichier excel dans lequel je peux rajouter des questions et réponses. Je l'exporte en csv (donc en iso).

    Depuis mon site web je peux importer le fichier csv.
    Et je rajoute mes champs dans ma base (qui est en utf-8).


    Evidemment j'ai des soucis d'encodage, si je laisse tel quel, un champ contenant un accent dans mon csv n'est même pas pris en compte.

    J'ai essayé pas mal de chose :
    utf8_decode = me met des points d'interrogation à la place des accents
    utf8_encode = me supprime les accents


    J'ai mis un htmlspecialchars parce que j'avais des soucis avec les double quote

    Ci-joint mon code d'import :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    		 $fichier = $_FILES['fichier']['tmp_name'];
    	$row = 1;
    	if (($handle = fopen($fichier, "r")) !== FALSE) {
    		while (($data = fgetcsv($handle, 1000, "\r\n")) !== FALSE) {
    			$num = count($data);
    			$row++;
    			for ($c=1; $c < $num; $c++) {
     
     
     
    				//explode
    				$pieces = explode(";", $data[$c]);
     
     
    			$titre_question = htmlspecialchars(utf8_encode($pieces[0]));
    			$categorie = htmlspecialchars(utf8_encode($pieces[1]));
    			$categorie2 = htmlspecialchars(utf8_encode($pieces[2]));			
     
    			if($titre_question != ''){
    			$sql = "INSERT INTO a_question(titre_question, categorie, categorie2) VALUES(\"$titre_question\", \"$categorie\", \"$categorie2\")"; 
    			$question = $bdd->query($sql);	
    			$id_question = $bdd->lastInsertId(); 
     
    				}
    				$i = 3;
    				while($i < 13)
    				{
     
    				$reponse= htmlspecialchars(utf8_encode($pieces[$i]));	
    				$ponderation = $pieces[$i + 1];	
    				$remarque = htmlspecialchars(utf8_encode($pieces[$i + 2]));	
     
    				echo "<br/>$reponse";
    					if($reponse != ''){
    					$rep = "INSERT INTO a_reponse(txt_reponse, id_question, ponderation,remarque) VALUES(\"$reponse\", \"$id_question\", \"$ponderation\", \"$remarque\")"; 
    					$reppp = $bdd->query($rep);	
     
    					}
     
    				$i = $i +3;
    				}
     
    			}
    		}
    		fclose($handle);
     
    	}

    Merci de m'aider si vous avez des pistes !

  2. #2
    Membre confirmé Avatar de Legenyes
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 174
    Par défaut
    Bonjour

    Ouvrir ton fichier CSV avec Notepad++
    Et cliquer sur conversion => UTF8

    On sais jamais

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 43
    Par défaut
    J'ai essayé et du coup aucune réponse le fichier n'est pas pris en compte... si j'essaye d'echo les champs ils sont tous vides

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    1/ Est-ce que tu indiques préalablement à mysql de travailler en utf-8 ?

    2/ N'utilise pas "htmlspecialchars" mais "mysql_real_escape_string" pour protéger tes variables dans les requêtes.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 43
    Par défaut
    Mes bases sont bien en utf-8 et lors de ma connexion je fais bien un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->query("SET NAMES UTF8");

    Est-ce suffisant ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Côté bdd oui. Cela dit avec pdo il est recommandé de déclarer l'encodage avec l'attibut "MYSQL_ATTR_INIT_COMMAND"

    Et oui et donc je viens de me rendre compte que plus haut je parlais de "mysql_real_escape_string" qui forcément est inapproprié avec pdo. Il faut donc utiliser la fonction "quote" ou sinon des requêtes préparées mais en tous cas pas htmlspecialschars pour protéger tes variables dans les requêtes.

Discussions similaires

  1. Probleme module Text::CSV et accent
    Par titi6913 dans le forum Modules
    Réponses: 2
    Dernier message: 03/07/2009, 21h20
  2. [ajax-PHP] accent en POST
    Par bubble_gum dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/05/2009, 10h20
  3. Réponses: 2
    Dernier message: 14/05/2009, 12h08
  4. Fichier CSV et Accent - Ascci Unicode
    Par nicleco dans le forum Windows Forms
    Réponses: 5
    Dernier message: 19/08/2008, 11h52
  5. Quelle méthode choisir ? MySql, CSV,PHP
    Par redvivi dans le forum Linux
    Réponses: 1
    Dernier message: 25/12/2006, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo