Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/08/2007, 11h42   #1
Membre habitué
 
Avatar de xenos
 
Inscription : septembre 2005
Messages : 402
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 402
Points : 140
Points : 140
Par défaut chargement fichier et caractères spéciaux

Bonjour,

Je charge un fichier .csv codé en ANSI, qui se trouve en annexe.

Pour contrer les caractères spéciaux j'utilise utf8_decode :

Code php :
1
2
3
4
5
6
7
$nace = fopen("nace/nace_fr.csv", "r");
 
while (!feof($nace))
{
	//On utilise urt8_decode pour que tous les caractères spéciaux (é, è, ...) soient correctement gérés
	$nace_complet = $nace_complet . utf8_decode(fgets($nace));
}

Le problème est que même avec cette fonction de nombreux caractères ne sont pas pris en compte : ' Ś ć ł ą ż ... Ils sont alors remplacé par des ? (point d'interrogation) lorsque je les affiche ou que je les enregistre dans la base de données ... :s

J'ai aussi essayé d'utiliser un htmlentities et un htmlspecialchars, mais en les utilisant, rien ne s'affiche et rien ne s'enregistre dans la base de données ... :s

Code php :
1
2
3
4
5
6
7
$nace = fopen("nace/nace_fr.csv", "r");
 
while (!feof($nace))
{
	//On utilise urt8_decode pour que tous les caractères spéciaux (é, è, ...) soient correctement gérés
	$nace_complet = $nace_complet . htmlentities(fgets($nace));
}

En résumé : Comment puis je charger le fichier .csv sans que les caractères spéciaux ne soient remplacés par des points d'interrogation ?

D'avance merci pour vos réponses.



xenos
Fichiers attachés
Type de fichier : rar nace_pl.rar (14,5 Ko, 2 affichages)
xenos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 08h23   #2
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605

Tu peux forcer dans tes entêtes via la fonction header l'encodage de la page.
De même, ta base de données est bien en utf-8 elle aussi ?
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 09h50   #3
Membre habitué
 
Avatar de xenos
 
Inscription : septembre 2005
Messages : 402
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 402
Points : 140
Points : 140
Merci de ta réponse trotters213.

Citation:
Envoyé par trotters213 Voir le message
Tu peux forcer dans tes entêtes via la fonction header l'encodage de la page.
J'ai donc rajouté à la première ligne du fichier :

Code :
<?php	header('Content-Type: text/html; charset=utf-8');
Citation:
Envoyé par trotters213 Voir le message
De même, ta base de données est bien en utf-8 elle aussi ?
J'ai modifié l'ensemble des colonnes, de la table de réception, au format utf8_bin. Vu que ces colonnes devront réceptionner des mots dans de nombreuses langues.

Malgré toutes ces modifications le problème persiste ...
xenos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 10h31   #4
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605

Je n'avais pas relever mais utf8_decode (et respectivement utf8_encode) permet de passer de l'UTF-8 en ISO-8859-1 (et respectivement de l'ISO_8859-1 en UTF-8) or tes caractères spéciaux ne sont pas en ISO-8859-1.

Tu as essayé de forcer le type de ta page en utf-8, ta base en utf-8 et lors de l'enregistrement de tes caractères spéciaux dans la BD, tu ne fais rien de spécial et pareil pour la lecture?
En gros tu insères bêtement ton fichier ligne par ligne dans ta BD sans utiliser de utf8_encode ni de htmlentities. Et lorsque tu fais l'affichage des valeurs de cette base tu ne fais rien de spécial sinon te débrouiller pour tout avoir en utf-8 (les pages et la base).
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2007, 11h35   #5
Membre habitué
 
Avatar de xenos
 
Inscription : septembre 2005
Messages : 402
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations forums :
Inscription : septembre 2005
Messages : 402
Points : 140
Points : 140
Merci pour ton aide trotters213 !

Ca fonctionne parfaitement !

Bon développement à tous.



xenos
xenos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h01.


 
 
 
 
Partenaires

Hébergement Web