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 :

Problèmes caractères spéciaux BDD -> PHP.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 50
    Points : 24
    Points
    24
    Par défaut Problèmes caractères spéciaux BDD -> PHP.
    Bonjour/Bonsoir.

    Je rencontre un problème très gênant sur mes pages. En fait les utilisateurs de mon application web sont amenés à créer des demandes d'intervention accompagné d'un commentaire et, sans que je comprenne pourquoi, certaines insertions se font bien et d'autres non (alors que le code ne change pas), je m'explique :

    1ère insertion - Boitier Ã* clef élévateur cassé au niveau du compacteur
    2ème insertion - Vitre porte SURG 7.1 brisée. 1 côté du double vitrage cassé entièrement (côté couloir). Prévoir remplacement de la vitre ou de la porte entière?

    Ensuite je fais apparaître la demande de deux manière, soit une demande par demande (l'utilisateur entre le numéro de la demande), soit dans un tableau les regroupant toutes / le problème reste le même dans les deux cas :

    • Si je ne met pas de charset et donc que je ne déclare pas ma page en UTF-8, j'ai cet affichage :

    1ère insertion - Boitier à clef élévateur cassé au niveau du compacteur
    2ème insertion - Vitre porte SURG 7.1 brisée. 1 côté du double vitrage cassé entièrement (côté couloir). Prévoir remplacement de la vitre ou de la porte entière?

    • Si en revanche je met un charset et donc que je déclare ma page en UTF-8, j'ai cet affichage :

    1ère insertion - Boitier à clef élévateur cassé au niveau du compacteur
    2ème insertion - Vitre porte SURG 7.1 bris�e. 1 c�t� du double vitrage cass� enti�rement (c�t� couloir). Pr�voir remplacement de la vitre ou de la porte enti�re?


    J'ai essayé tout ce que j'ai trouvé sur internet et dans les deux cas (utf8_decode/encode, html_entity_decode, SET NAMES UTF8, SET CHARACTER SET UTF8). Même quand je suis dans le premier cas et que je fais un replace de façon à rechercher é et à le remplacer par " é " cela ne fonctionne pas.

    Voici mon code (ici pour le faire apparaître sous forme de tableau) :

    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
    <?php
    	$base = mysqli_connect("serveur","user","mdp");
    	mysqli_select_db($base,"table");	
     
    	session_start();
    	include 'entete_boutons.php';
    	include 'nav.php';
    ?>
     
    <!DOCTYPE html>
    	<head>
    		<meta charset="utf-8">
    		<link rel="stylesheet" href="miseenpage.css" />
    		<link rel="stylesheet" href="tableausuividirta.css"/>
    		<title>Suivi DI complet</title>
    	</head>
     
    	<body>
    		<?php	
    			//Récupération des informations sur les DI.
    			$recupererInformationsDI = "SELECT numDemande,nomDemandeur,type,commentaire,numEquipement,urgence,uc,infrastructure,ville,etat,date,lien_devis FROM demandeintervention ORDER BY infrastructure ASC, uc ASC";
    			$requeteRecupererInformationsDI = mysqli_query($base,$recupererInformationsDI);
    		?>
    			<h4><u>Suivi des demandes d'intervention complet.</u></h4>
    		<?php
    			//Création du tableau.
    			echo '<table>
    						<tr>
    							<th>Infrastructure</th>
    							<th>UC</th>
    							<th>Numéro de demande</th>
    							<th>Nom du demandeur</th>
    							<th>Type de la demande</th>
    							<th>Commentaire du site</th>
    							<th>Numéro d\'équipement</th>
    							<th>Niveau d\'urgence</th>
    							<th>Etat de la demande</th>
    							<th>Date d\'intervention</th>
    							<th>Devis</th>
    						</tr>';
     
    			while($ligne = mysqli_fetch_array($requeteRecupererInformationsDI)){
    				$jour = substr($ligne['date'],8,2);
    				$mois = substr($ligne['date'],4,4);
    				$annee = substr($ligne['date'],0,4);
    				$date = $jour.$mois.$annee;
     
    				if($ligne['lien_devis'] == null){
    					echo 	'<tr>
    							<td>'.$ligne['infrastructure'].'</td>
    							<td>'.$ligne['uc'].'</td>
    							<td>'.$ligne['numDemande'].'</td>
    							<td>'.$ligne['nomDemandeur'].'</td>
    							<td>'.$ligne['type'].'</td>
    							<td>'.str_replace("\n",'<br />',$ligne['commentaire']).'</td>
    							<td>'.$ligne['numEquipement'].'</td>
    							<td>'.$ligne['urgence'].'</td>
    							<td>'.$ligne['etat'].'</td>
    							<td>'.$date.'</td>
    							<td>Non</td>
    						</tr>';
    				}
    				else{
    					echo 	'<tr>
    							<td>'.$ligne['infrastructure'].'</td>
    							<td>'.$ligne['uc'].'</td>
    							<td>'.$ligne['numDemande'].'</td>
    							<td>'.$ligne['nomDemandeur'].'</td>
    							<td>'.$ligne['type'].'</td>
    							<td>'.str_replace("\n",'<br />',$ligne['commentaire']).'</td>
    							<td>'.$ligne['numEquipement'].'</td>
    							<td>'.$ligne['urgence'].'</td>
    							<td>'.$ligne['etat'].'</td>
    							<td>'.$date.'</td>
    							<td><a href="devis/'.$ligne['lien_devis'].'" target="_blank">Oui</a></td>
    						</tr>';
    				}
    			}
     
    			echo '</table>';
    		?>
    	</body>
    </html>
    Dans le cas de la mise sous forme de tableau c'est deux fois plus embêtant étant donné que je fais un export vers Excel et que les lignes où on retrouve un � se transforment automatiquement en " FAUX ".

  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
    Déjà il n'y a pas lieu de faire des décodages/encodages.
    Ensuite le SET NAMES doit être fait à chaque connexion (ce qui n'est pas le cas dans le code que tu nous montres).
    Pour finir, il faut réécrire les données mal encodées actuellement présentes dans ta bdd puisque de toute évidence tu as des données avec des encodages différents.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    C'est normal, j'ai enlevé tout ce que j'avais testé, j'ai mis uniquement mon code de départ, c'est pour cela qu'il n'y a pas le SET NAMES, mais je l'ai mis après la connexion à la base de données, cela n'a rien fait du tout.
    Tu veux dire que je dois réécrire les données manuellement ? Et pourquoi certaines sont bien encodées et pas d'autres ?

  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
    Si tu as enlevé/remis des paramètres, c'est normal que tu te retrouves avec des données encodées différemment dans la base de données.
    Il faut aussi t'assure que tes fichiers sont bien encodés en UTF8 (à verifier dans un editeur de texte comme notepad++) et que tes documents HTML ont bien un en-tête UTF8.
    Et pour les données mal encodées, à mois que tu sois capable de toutes les isoler pour faire un traitement de masse, il faut les supprimer ou les réecrire.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 50
    Points : 24
    Points
    24
    Par défaut
    Les paramètre que j'ai essayé sont dans le fichier permettant l'affichage, je n'ai strictement rien changé dans le fichier qui permet à l'utilisateur d'entrer une DI et donc de saisir les commentaires. Je ne comprends donc pas pourquoi l'encodage change d'une donnée à l'autre.
    Tous mes fichiers sont bien en UTF-8 sur Notepad et ont bien l'en-tête charset.
    Y a une fonction sur Mysql pour faire ça ?

Discussions similaires

  1. Problème caractères spéciaux...
    Par the_edge dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2006, 10h49
  2. [MySQL] problème caractères spéciaux
    Par unmulot dans le forum PHP & Base de données
    Réponses: 37
    Dernier message: 30/06/2006, 11h50
  3. problèmes caractères spéciaux
    Par khokho dans le forum Installation
    Réponses: 1
    Dernier message: 29/04/2006, 18h15
  4. [MySQL]Problèmes caractères spéciaux
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/03/2006, 09h47
  5. Problème caractères spéciaux
    Par TeKaBloK dans le forum C
    Réponses: 2
    Dernier message: 26/12/2005, 14h40

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