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
Partager