problème encodage

problème encodage - PHP - Programmation

Marsh Posté le 21-08-2006 à 16:54:32    

Bonjour,
j'espèqre que l 'un de vous aura la réponse à ce problème.
J'ai une application écrite en php avec un encodage utf8. J'utilise également une base de données mysql avec un encodage utf8.
Quelque part dans mon code, j'ouvre un fichier csv pour réucupérer les données qu'il y a dedans et les mettre dans la base.
Voici le code:

Code :
  1. /* Connexion bdd */
  2.    include("connexionMySQL.php" );
  3.  
  4. /* On ouvre le fichier à importer en lecture seulement */
  5. $fichier = "monfichier.csv";
  6. if (file_exists($fichier))
  7.      $fp = fopen("$fichier", "r" );
  8. else
  9.      { /* le fichier n'existe pas */
  10.        echo "Fichier introuvable !<br>Importation stoppée.";
  11.        exit();
  12.      }
  13.     $i=0; 
  14. $ligne = fgets($fp,4096); //sauter la premiere ligne (les noms des champs)
  15.     while (!feof($fp)) /* Et Hop on importe */
  16.     { /* Tant qu'on n'atteint pas la fin du fichier */
  17.        $ligne = fgets($fp,4096); /* On lit une ligne */ 
  18.    $i++;
  19.        /* On récupère les champs séparés par ; dans liste*/
  20.        $liste = explode( ";",$ligne); 
  21.    
  22.        /* On assigne les variables */
  23.                 $titre = utf8_encode(htmlspecialchars($liste[5],ENT_QUOTES));
  24.  $objet = utf8_encode(htmlspecialchars($liste[6],ENT_QUOTES));
  25.  $observations = utf8_encode(htmlspecialchars($liste[7],ENT_QUOTES));
  26.  $type_doc = utf8_encode(htmlspecialchars($liste[8],ENT_QUOTES));
  27.  $sous_type_doc = utf8_encode(htmlspecialchars($liste[9],ENT_QUOTES));
  28.        /* Ajouter un nouvel enregistrement dans la table */
  29.        if ($ligne) $result= MYSQL_QUERY('INSERT INTO fiche VALUES("","'.$titre.'","'.$objet.'","'.$observations.'","'.$type_doc.'","'.$sous_type_doc.'" )');
  30.        if(mysql_error())
  31.         { /* Erreur dans la base de donnees, sûrement la table qu'il faut créer */
  32.            print "Erreur dans la base de donn&eacute;es : ".mysql_error();
  33.            print "<br>Importation stopp&eacute;e.";
  34.            exit();
  35.         }       
  36.     }


 
Le problème est que tous les champs sont correctement remlis dans la base, sauf sous_type_doc, ou les accents disparaissent. Par exemple "contrat d'achat/de vente" devient "contrat dachat/de vente" .
Je trouve ça pas normal vue que tous les champs ont la même structure.
quelq'un peut m'aider à résoudre ce problème?

Reply

Marsh Posté le 21-08-2006 à 16:54:32   

Reply

Marsh Posté le 21-08-2006 à 17:13:29    

salut essaye utf8_decode et htmlentities tu devrais trouver ton bonheur sur la doc php.

Reply

Marsh Posté le 21-08-2006 à 17:20:25    

Non je l'ai déjà essayé mais ça ne marche pas :(

Reply

Marsh Posté le 21-08-2006 à 18:47:50    

Ton fichier csv est enregistré en ISO non ? Si ton script est en utf8, et le fichier analysé en ISO, ça va merder. Dans ce cas il te faut utiliser utf8_encode.
 
J'ai le pbl inverse dans une application : script en ISO et fichier qui peut etre en utf8. Voilà ce que j'ai fait :  

Code :
  1. if ($this->_is_utf8($line)) {
  2.     $line = utf8_decode($line);
  3. }


avec  

Code :
  1. /**
  2.     * Determine si une chaine est en UTF-8
  3.     * fonction cree par le W3C
  4.     *
  5.     * @link http://w3.org/International/questi [...] utf-8.html
  6.     * @param string $string  chaine de caractere a analyser
  7.     * @return bool    vrai si UTF-8, faux sinon
  8.     */
  9.     private function _is_utf8($string)
  10.     {
  11.     return preg_match('%^(?:
  12.     [\x09\x0A\x0D\x20-\x7E] # ASCII
  13.     | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
  14.     | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
  15.     | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
  16.     | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
  17.     | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
  18.     | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
  19.     | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
  20.     )*$%xs', $string);
  21.     }


Message édité par Djebel1 le 21-08-2006 à 18:50:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed