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

PHP & Base de données Discussion :

Mauvais encodage (probleme de caractere speciaux) [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 59
    Points
    59
    Par défaut Mauvais encodage (probleme de caractere speciaux)
    Bonjour,

    Mon programme permet de recuperer des informations sur une page html.
    Je recupere une date sous forme 01 aout 2009, mais le probleme est dans le mois car le fichier html a été traité donc il y a des caracteres speciaux au lieu d'avoir é ou ù il y a des Ȩ ou È©

    Mon code actuel :
    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
     
    switch($mois)
    {
    	case "janvier":  $mois = "01";break;		
    	case "febrier":  $mois = "02";break;
    	case "mars":  	 $mois = "03";break;
    	case "avril":  	 $mois = "04";break;
    	case "mai":  	 $mois = "05";break;
    	case "juin":  	 $mois = "06";break;
    	case "juillet":  $moi = "07";break;
    	case "aout":  	 $mois = "08";break;
    	case "septembre":$mois = "09";break;
    	case "octobre":  $mois = "10";break;
    	case "novenbre": $mois = "11";break;
    	case "decenbre": $mois = "12";break;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = $jour."/".$mois."/".$annee;
    La valeur du mois dans le fichier html est aoÈ©t donc date = 01/ao权t/09 dans mon navigateur.

    je voudrais dans le switch faire une chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    switch($mois)
    {
    	case "janvier":  $mois = "01";break;	
    	case "f(.*)brier":  $mois = "02";break;
    	case "ao(.*)t":  	 $mois = "08";break;
    }
    Mais cela ne marche pas.

    Merci de votre aide
    tortue

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le fichier HTML que tu lis est visiblement écrit en UTF8 alors que ta page est ecrite en ISO-8859.
    Tu peux utiliser utf8_decode() pour faire la conversion.

    car le fichier html a été traité donc il y a des caracteres speciaux au lieu d'avoir é ou ù il y a des Ȩ ou È©
    En fait un caractère spécial ca ne veut finalement pas dire grand chose : dans ta page à toi aussi le "é" est encodé.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    merci pour la fonction mais la page html vient par mail et je récupère le fichier en pièce jointe en perl donc je vois pas comment l'utiliser.

    Et désolé pour l'expression caractères spéciaux mais on trouve plus de solutions sur le net en mettant caractère spéciaux.

    Mais j'arrive pas à trouver comment faire pour que dȨcembre devient decembre car je récupère dȨcembre dans le fichier html pour le traiter dans une page php.

    merci d'avance
    tortue

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as essayé avec utf8_decode() ?

    Pour "caractères spéciaux" ce n'etait pas une critique.
    On désigne souvent comme cela d'une part les caractères qui posent souvent problème a l'affichage, d'autre part les caractères qui ont aussi une signification dans le langage de programmation.
    Mais au final informatiquement parlant, un "é" n'est pas plus spécial qu'un "e" ; la seule différence est que le "e" est encodé de la même façon dans plusieurs encodage et donc passe partout.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    je ne l'avais pas pris comme une critique, il est vrai que tu as raison sur ce point. Il faut que je perde cette habitude de dire caracteres speciaux.

    oui j'ai essayé la fonction :

    mais il y a une erreur de ce type
    Parse error: syntax error, unexpected $end in fonction.php on line 164

    J'ai regardé le type du paramètre de la fonction c'est un string mais la valeur mois = 'dȨcembre'; est un string aussi.

    tortue

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Unexpected end c'est souvent un problème de boucle mal fermée.
    Si tu ne trouves pas, montre-nous ton code.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    Ca marche pas, l'encodage ne fonctionne pas mais c'était bien ma boucle qui était mal fermé.

    mon code :

    la page html qui a été envoyé par mail et que j'ai recupéré par une fonction perl.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <td class="TABLE_DATA2">Ãálundi 9 dȨcembre 2009 10:57:35Ãá</td>
    Il y a plus de champ mais je met se qui est utile.

    ma fonction php :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    function exploitation($chemin,$chemin_fichier_texte)
    {
    	global $date;
     
    //on effectue une ouverture de fichier puis on lit le fichier
    	$fichier = fopen($chemin,"r");
     
    //on parcourt toutes les lignes
    	while (!feof($fichier))
    	{
    		// lecture du contenu de la ligne
    		$page .= fgets($fichier);
    	}
    //on ferme le fichier html
    	fclose($fichier);
     
    //on ouvre un fichier texte pour recuperer tous les champs du message html
    	$fichier_texte = fopen($chemin_fichier_texte,'w');
     
    //on isole le texte a partir un mot clé
    	$texte = eregi("date(.*)",$page,$regs);
     
    //On ecrit dans le fichier texte
    	fwrite($fichier_texte,$regs[1]);
    //fermeture du fichier
    	fclose($fichier_texte);
     
    //date actuelle
    	$date_actuelle = date('d/m/y'); 
    	$champs_date = explode("/",$date_actuelle);
    	$annee_courante = $champs_date[2];
    	$mois_courant = $champs_date[1];
    	//echo "$mois_courant";
    	//echo "$annee_courante";
     
    //On recupere toutes valeurs du fichier html
    	for($i=0;$i<=14;$i++)
    	{
    		//on recupere seulement se qui se trouve entre les balises
                    $champs = explode("</td>",$regs[1]);
    		//echo "$champs[$i]";
    	}
     
    //on recupere la date...
    	for($j=8;$j<=65532;$j=$j+7)
    	{
     
    //il y d'autre morceau de code qui fonctionne avec la valeur $j
     
     
    //Pour recuperer la date il faut ajouter 5 car les valeur sont dans un tableau et ce n'est pas la premiere colonne c'est la 6ieme.
    		$k=$j+5;
    		$colonne_DATE = explode("Ãá",$champs[$k]);
    		$date =$colonne_DATE[1];
    		//echo "$date";
     
    //On recupere la date pour faire un affichage jj/mm/aa
    		$champs_date = explode(" ",$date);
    		$jour = $champs_date[1];
    		$mois = $champs_date[2];
    		utf8_decode($mois);
     
    //on met la date sous le format de $annee_courante yy au lieu de yyyy
    		$temps = $champs_date[3];
    		$annee = $temps[2].$temps[3];
    		//echo "$jour";
    		//echo "$mois";
    		//echo "$annee";
     
    		//On affecte la valeur du mois en decimal
    		switch($mois)
    		{
    			case "janvier":  $mois = "01";break;		
    			case "fevrier":  $mois = "02";break;
    			case "mars":  	 $mois = "03";break;
    			case "avril":  	 $mois = "04";break;
    			case "mai":  	 $mois = "05";break;
    			case "juin":  	 $mois = "06";break;
    			case "juillet":  $mois = "07";break;
    			case "aout":  	 $mois = "08";break;
    			case "septembre":$mois = "09";break;
    			case "octobre":  $mois = "10";break;
    			case "novenbre": $mois = "11";break;
    			case "decenbre": $mois = "12";break;
    		}
                    //echo "$mois";
             }
    }
    C'est un peu de bidouille mais j'ai pas d'autre solution pour récupérer la page html sur mon serveur. Mon code fonctionne bien sauf la valeur de $mois.

    merci de ton aide
    tortue

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu devrais faire le decodage en premier lieu.

    Au passage, tu as la fonction file_get_contents() pour recuperer le contenu d'un fichier dans une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            $page = utf8_decode(file_get_contents($chemin));

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    Ok mais j'ai une nouvelle erreur

    Warning: file_get_contents() expects parameter 1 to be string, resource given in fonction.php

    en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $fichier = fopen($chemin,"r");
    //on parcourt toutes les lignes
    while (!feof($fichier))
    {
    	// lecture du contenu de la ligne
    	$page .= utf8_decode(file_get_contents($fichier));
    }
    //on ferme le fichier html
    fclose($fichier);

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il ne fallait pas modifier ma ligne
    Toute la partie fopen ne sert plus.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    Ok il n'y a plus d'erreur mais rien ne s'affiche lors du echo "$mois";

    tortue

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu as modifié ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $colonne_DATE = explode("Ãá",$champs[$k]);
    ?

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    oui je l'ai modifier car il reste le caractere á au lieu de Ãá et le mois d'aout s'affiche ao?t

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $colonne_DATE = explode("á",$champs[$k]);
    tortue

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut que tu remontes en partant de $mois en contrôlant tous les intermediaires.
    Bref ... debugguer.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2009
    Messages : 70
    Points : 59
    Points
    59
    Par défaut
    je te remercie sabotage pour ton aide et je vais essayer de debugger.

    Merci
    tortue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème de caractères spéciaux
    Par chaabane dans le forum Mise en forme
    Réponses: 4
    Dernier message: 21/08/2007, 23h22
  2. Problème de caractères spéciaux
    Par cflo91 dans le forum Mise en forme
    Réponses: 9
    Dernier message: 14/08/2007, 15h02
  3. Probleme avec caractere speciaux
    Par blairswish dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/12/2006, 22h47
  4. [HQL]Problème quand caractères spéciaux.
    Par Dimitri S. dans le forum Hibernate
    Réponses: 2
    Dernier message: 25/10/2006, 16h48
  5. [Encodage] codage des caractères spéciaux
    Par soulhouf dans le forum Général Java
    Réponses: 11
    Dernier message: 24/08/2005, 12h07

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