Problème d'accents à la lecture d'un fichier texte en php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème d'accents à la lecture d'un fichier texte en php

par jojolapine » 30 déc. 2008, 22:30

Pour y voir un epu plus clair: http://www.phpfrance.com/forums/voir_sujet-245062.php
Tu seras obligé d'utilsier SET NAMES UTF-8 pour tes enregistrements si tu veux que tes données aient un tant soit peu de cohérences...
ALlez un peu de courage, tu reprends sur de bonnes bases, et c'est partit!

par eloreal » 30 déc. 2008, 21:02

Merci, j'ai essayé, mais il fallait le faire dès le début, mes bases sont déjà pleines de données, et avec cette requete, les infos dans la base sont différentes, et donc si je le fais maintenant, je récupèrerais mal toutes les anciennes.... mais c'est certainement très bien à utiliser!

Pour le moment, je reste avec mb_convert_encoding($content, 'UTF-8',$mon_encodage);
il y a juste quelques caractères qui ne fonctionnent pas, et je ne sais pas pourquoi... peut etre des réglages au niveaux du serveur apache/php/mysql ???

a+

par Victor BRITO » 30 déc. 2008, 17:58

Je ne connais pas cette requête, comment fonctionne-t'elle? ou faut elle la mettre? juste avant un insert??
La lecture du manuel de MySQL ne fait jamais de mal :
SET NAMES indique ce qui est dans la commande SQL que le client envoie. Par conséquent, SET NAMES cp1251 indique au serveur : ``les futurs messages fournis par ce client seront dans le jeu de caractères cp1251'' et le serveur est libre de les traduire dans son propre jeu de caractères, éventuellement.
Par conséquent, mieux vaut l'exécuter avant une insertion de données.

par eloreal » 30 déc. 2008, 17:52

Je ne connais pas cette requête, comment fonctionne-t'elle? ou faut elle la mettre? juste avant un insert??

par Victor BRITO » 30 déc. 2008, 17:29

As-tu pensé à la requête SQL suivante :

Code : Tout sélectionner

SET NAMES 'utf8'
? ;)

Valeur de retour de mb_detect_encoding

par eloreal » 30 déc. 2008, 17:27

Re,

Oui quand j'affiche le retour de mb_detect_encoding j'obtiens ISO-8859-1. Qui est à priori bien l'encodage de mon fichier texte généré par notepad.
Mes caractères sont bien affichés sur ma page web, mais mal insérés dans la base.

Et si je récupère l'encodage seulement avec mb_detect_encoding($content); là j'obtiens UTF-8, et à ce moment là mes caractères disparaissent carrément de l'écran, et ne sont pas insérés dans la base!

:(

Re: iconv et mb_convert_encoding

par Victor BRITO » 30 déc. 2008, 17:12

$mon_encodage = mb_detect_encoding($content.'a',"ASCII, UTF-8, ISO-8859-1, KOI8-R", true); // .'a' pour éviter le bug php
Soit dit en passant, tu peux te contenter de ça :
$mon_encodage = mb_detect_encoding($content);
As-tu vérifié ce que retournait exactement la variable $mon_encodage ?

iconv et mb_convert_encoding

par eloreal » 30 déc. 2008, 17:04

Hello,

Oui malheureusement, j'ai essayé et:
mb_convert_encoding($content, 'UTF-8',$mon_encodage);
et
iconv($mon_encodage,'UTF-8',$content);
avec le même mauvais résultat. :(

Pour info, je récupère $content et $mon_encodage de la façon suivante:
$content = file_get_contents($fn); // ou fn est mon nom de fichier
$mon_encodage = mb_detect_encoding($content.'a',"ASCII, UTF-8, ISO-8859-1, KOI8-R", true); // .'a'
pour éviter le bug php

Auriez vous d'autres suggestions?

par Victor BRITO » 30 déc. 2008, 16:44

En plus des fonctions de l'extension mbstring, as-tu essayé iconv() ?

Problème d'accents à la lecture d'un fichier texte en php

par eloreal » 30 déc. 2008, 16:32

Bonjour à tous,

Voici mon problème:
Sur mon site, je permets l'import de fichiers vcard, texte ou csv, comprenant des noms et prénoms, vers ma base de données. J'utilise PHP et une base mysql.

La base de données est en utf-8 (c'est un besoin car les fichiers importés peuvent être dans toutes les langues)

Lorsque j'importe des fichiers encodés en UTF-8, aucun problème.
Lorsque j'importe un fichier texte tout simple, fait dans notepad, les accents ne passent pas.

Pour lire mon fichier j'utilise la fonction file_get_contents.
J'ai essayé d'utiliser mb_detect_encoding et mb_convert_encoding pour toujours transformer l'encodage du texte qui ne serait pas en UTF-8 vers l'UTF-8, mais apparemment cela ne passe pas.

Existe-t'il une bonne façon de faire pour lire un fichier texte dans son encodage et transformer ensuite le contenu en UTF-8???

Merci de votre aide, j'ai passé des jours dessus sans trouver de solution, malgré tout un tas de tests.

Salutations.

Emmanuel