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 :

Encodage accents et caractère spéciaux


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Encodage accents et caractère spéciaux
    Bonjour à tous,

    Je viens de faire un mini site PHP avec une petite BDD contenant 3 tables : vidéos, catégorie et genre, afin de lister des vidéos sur une page, et pouvoir les filtrer par catégorie ou genre.
    J'alimente cette BDD grâce à une interface d'admin simplifiée permettant simplement de faire un INSERT dans la table vidéo (titre, url, id_catégorie, id_genre).

    Mon problème est simple, lorsque j'ajoute une catégorie dont le libellé possède un accent, dans ma BDD l'accent est encodé. Par exemple, le "é" devient "é" ce qui fait que derrière, comme je récupère ce libellé dans une variable $categorie_select = $_POST['categorie'], lorsque je veux la réutiliser dans une seconde requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $queryC = "SELECT * FROM categorie WHERE categorie.libelle = '".$categorie_select."'";
    La requête ne renvoie rien car categorie.libelle n'est jamais égal à $categorie_select à cause justement des accents qui se transforment.
    categorie.libelle = maCatégorie
    $categorie_select = maCatégorie
    Comment faire pour que les accent restent des accents ? Je sais qu'il y a une histoire d'encodage mais ne suis absolument pas calé sur le sujet.
    N'y a t-il pas quelque chose à définir dans le header ?

    Merci anticipé !

    Rom.

  2. #2
    Membre chevronné
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Novembre 2004
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 285
    Points : 2 162
    Points
    2 162
    Par défaut
    Oui c'est une histoire d'encodage.
    é représente une lettre avec accent encodé en UTF8.

    Pour faire simple comme tu débutes essayes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $queryC = "SELECT * FROM categorie WHERE categorie.libelle = '".utf8_decode($categorie_select)."'";
    Si cela ne marches pas alors essaye en remplacant utf8_decode par utf8_encode.


    Le plus propre serait qu'au moment de l'enregistrement tu appliques l'un ou l'autre des utf8_encode ou decode pour que dans ta base de données tu n'es pas de caractères bizarres.

  3. #3
    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

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Ok merci beaucoup à vous deux !

    Je vais checker un peu le tuto.
    Autant tout encoder comme il faut dès le début

    je repasserai ici donner des news !

    Merci encore.

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Le tuto à l'air OK, simple question, dans phpmyadmin il faut aussi modifier l'encodage des champs que l'on a créé.
    A priori il faut les définir en utf8, mais comme phpmyadmin me propose plein de "déclinaisons" utf8 comme utf8_bin par exemple ou utf8_unicode_ci, lequel faut-il choisir ?

  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
    utf8_bin et utf8_unicode_ci sont des interclassements, pas des encodages proprement dit.
    Ils vont contrôler la façon dont sont triées et comparées les données.
    utf8_unicode_ci signifiant "Case Insensitive" c'est à dire ne prenant pas en compte les différences de majuscules/minuscules.

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    OK ben j'ai fait toutes les modifes et ça à l'air niquel, les accent passent.
    Dans le tuto y a ces deux étapes, ne font-elles pas doublon ?
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header( 'content-type: text/html; charset=utf-8' );

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 830
    Points
    5 830
    Billets dans le blog
    1
    Par défaut
    Non, car la 1e ligne, c'est du html, donc exécutée en local (par le navigateur), alors que la 2e est du PHP donc exécutée sur le serveur.

Discussions similaires

  1. affichage des accents et caractères spéciaux
    Par sarahG dans le forum Langage
    Réponses: 7
    Dernier message: 05/06/2008, 17h37
  2. accents et caractères spéciaux dans un champ
    Par falco- dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/10/2007, 15h29
  3. problème d'encodage avec les caractères spéciaux
    Par wind_vinch dans le forum Ruby on Rails
    Réponses: 4
    Dernier message: 23/10/2007, 12h47
  4. [Wamp] accents et caractères spéciaux
    Par faamugol dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 17/10/2007, 00h42
  5. Probleme Accents et Caractères Spéciaux
    Par Danyel dans le forum VB.NET
    Réponses: 14
    Dernier message: 22/08/2007, 21h59

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