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 :

afficher correctement les accents? (ou 'charset hell'!)


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut afficher correctement les accents? (ou 'charset hell'!)
    Bonjour,

    Je ne sais point si mon problème est spécifique a mysql, oracle, php ou leur intégration, ce forum (php+sgbd) me paraissait le plus indique, toutefois si je me trompe veuillez m'excuser, essayons d'être efficaces:

    Le problème, en résume
    J'ai des bases de donnes sur le charset iso-8859-1, avec des accents et mon script en php affiche les accents comme des caractères différents (un Z accentué a la place du é, etc)

    Le problème, en détail
    J'ai un site que doit se connecter a deux bases de donnes (une sur oracle, autre sur mysql), les deux bases sont sur le charset ISO-8859-1 (enfin oracle l'intitule FRENCH_FRANCE.WE8ISO8859P1 mais c'est la même chose), je n'ai pas le droit de changer le charset ou toucher a les bases d'une manière quelconque (fichier de conf, ou autre) je ne peux QUE faire des requêtes.

    les accents sur la base mysql apparaissent sur ma page comme des caractères étranges (‰ etc), les accents sur ma base oracle apparaissent sur la page comme des interrogations (toujours).

    ce que je sait déjà (depuis mes recherches sur google, ce forum, les tutoriels et facs etc.)
    • nous pouvons faire un document xhtml indiquer son propre charset avec les lignes suivantes ( la premier ligne en début de fichier la deuxième dans la session "head", et CHARSET étant le charset souhaité: iso-8859-1, utf-8, etc):
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      <?xml version="1.0" encoding="CHARSET"?>... <meta http-equiv="Content-type" content="text/html; charset=CHARSET" />
    • nous pouvons faire le serveur apache identifier le charset du document qu'il envoi en mettant le code suivant dans .htaccess (j'ai les droits pour cela et j'ai vérifié les headers pour voir que cela marche, CHARSET étant les mêmes charset d'avant):
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      AddDefaultCharset CHARSET
    • nous pouvons changer le charset de php avec le code suivant (et changer la locale si besoin avec setlocale CHARSET restant les mêmes)
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ini_set('default_charset', 'CHARSET');
    • nous pouvons informer a mysql qui nous voulons qu'il convertisse ses messages a un charset avant de les envoyer avec la query suivante( CHARSET étant cette fois-ci : iso88591, utf8, etc, sans hyphen):
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      "SET CHARACTER SET 'CHARSET'"
    • nous pouvons convertir les caractères accentues en entités html en utilisant htmlentities ou mb_convert_encoding


    mes outils, dans le cas ou cela changerai des choses
    • php (5.1.2)
    • MDB2 (2.2.0) (module a PEAR pour abstraire les SGBD)
    • mysql (je n'ai point l'information de numéro de version un moyen de le demander par query?)
    • oracle (je n'ai point l'information de numéro de version un moyen de le demander par query?)
    • apache (2.0.55)
    • ubuntu drappy drake pour apache/php/mon travail en soi
    • windows 2003 server contient oracle
    • windows xp contient mysql
    • emacs 21 :^)


    ce que j'ai essaye, déjà en sachant la liste de choses ici haut
    • mettre la page en iso-8859-1
    • mettre la page en utf-8 et convertit tout en utf-8
    • ne pas convertir, informer a la base que je suis sur utf-8 et mettre la page sur utf-8
    • des variantes de ce trois dernières en utilisant htmlentities ou mb_convert_encoding


    aucune victoire, j'ai toujours de la poubelle visuel a la place des accents, poubelle que certes change entre une approche et autre mais qui est toujours de la poubelle.

    en vous remerciant d'avance votre temps d'avoir lu ce message,

    malk'zameth

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 24
    Points
    24
    Par défaut
    je voi ton probleme mais arive pas a capter dans quel ordre enfin bref essaye ces fonction en php il y en a une des 2 qui va allé pour toi .

    htmlentities() ou l'inverse html_entity_decode()

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par malk.zameth
    ce que je sait déjà (depuis mes recherches sur google, ce forum, les tutoriels et facs etc.)
    ...
    • ...
    • nous pouvons convertir les caractères accentues en entités html en utilisant htmlentities ou mb_convert_encoding

    ...
    aucune victoire,
    ...
    j'ai essaye d'utiliser htmlentities(), mais il me donne des entités qui représentent les caractères poubelles ! ce qui est encore plus bizarre !

    cela ne serait point le cas d'utiliser html_entity_decode(), car je n'ai pas d'entité si je n'utilise pas htmlentities ou mb_convert_encoding!

    enfin, merci beaucoup quand même d'avoir répondu! :)

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    les accents sur la base mysql apparaissent sur ma page comme des caractères étranges (&permil; etc), les accents sur ma base oracle apparaissent sur la page comme des interrogations (toujours).
    A quel niveau?
    Sur la page, dans le source HTML, sur un var_dump du résultat de la requete?
    En gros, c'est un pb d'affichage ou ça vient des BDD?
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par wamania
    A quel niveau?
    Sur la page, dans le source HTML, sur un var_dump du résultat de la requete?
    En gros, c'est un pb d'affichage ou ça vient des BDD?
    qui ce soit un var_dump (sur le browser ou en ligne de commande),
    ou sur la source, le problème reste le même, ma supposition a donc pointé sur le bdd, mais quand j'ai dit au bdd de "parler en utf-8" cela ma cause le même problème avec des caractères poubelles différents.
    :(

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 695
    Points : 1 071
    Points
    1 071
    Par défaut
    Juste une supposition, tes textes n'ont pas été insérés avec un mauvais charset?
    Car si c'est le cas, y a rien à faire, ton texte contient des ? et autres, et c'est "normal", c'est ce qu'il contient.

    ça m'est déjà arrivé, y a plus qu'a resaisir tout
    Articles sur developpez.com
    - Gestion des exceptions avec PHP5
    - Chiffrement et hash en PHP contre l'attaque Man in the middle
    - Aedituus - Espace membre sécurisé en PHP5

  7. #7
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    j'y avais songé a cela,
    mais hélas non, je fais l'interface web pour un programme existant, (e.g. je connecte a la base du programme directement avec un site en php), le programme lui même arrive a avoir les caractères sans le moindre problème!

Discussions similaires

  1. Afficher correctement les données d'un dataGrid
    Par alpesneige dans le forum Flex
    Réponses: 3
    Dernier message: 12/10/2009, 15h10
  2. [MySQL] Impossible d'afficher correctement les données
    Par vacknov dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/12/2008, 22h08
  3. [SQL] Comment afficher correctement les caractères accentués ?
    Par innova dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 06/01/2007, 11h35
  4. Réponses: 5
    Dernier message: 09/11/2006, 17h51
  5. [ENCODAGE][JAVA]Afficher correctement des accents
    Par kornelius dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/02/2004, 17h37

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