Page 1 sur 1

[Oracle + Php] Problème de conversion charset

Posté : 19 nov. 2006, 12:23
par Ryle
Bonjour,

J'ai quelques soucis de conversion de caractères entre mon serveur et ma base de données... c'est un sujet que j'avais déjà abordé, mais sans trouver de solution convenable. Je m'attaque à nouveau au problème suite à la découverte de cet article sur les nls d'oracle, mais sans plus de succes.

Voici le problème :

- J'ai un serveur Win 2k, avec easyphp 1.8 (no comment), un site en php et un client oracle, dont le charset en base de registre est FRENCH_FRANCE.WE8MSWIN1252
- J'ai une base de données oracle sous unix, qui est installée en AMERICAN_AMERICA.WE8ISO8859P1

=> quand je saisie certains caractères spéciaux (genre euro, le caractère 3pts de word "…", le "œ", etc.) ceux-ci sont stockés dans la base sous forme de "¿" (#0191) au lieu de #164 pour l'euro (qu'il ne sait pas plus interpréter en WE8ISO8859P1, mais qu'il peut restituer quand php l'interroge). Or lorsque je les récupères, ils apparaissent donc tous sous la forme de points d'interrogations inversés...

Quand je fais un getenv() du NLS avec php, j'obtiens bien WE8MSWIN1252, donc celui du serveur, qui est en théorie transmis à oracle pour qu'il fasse la conversion avec son charset à lui.

Avant de me dire que "ce n'est pas possible" ou "qu'il faut réinstaler la base dans le bon charset" je tiens à préciser que cela fonctionne en dév, que cela fonctionnait sur le précédent serveur, qu'à priori il s'agit uniquement d'un problème de configuration, et que je n'arrive pas à trouver où (apache, php, windows, unix, oracle ?) ni quoi...

J'ai essayé de changer le nls avec un putenv sans succes (je ne sais pas lequel mettre soit dit en passant), en le spécifiant en variable d'environnement (je sais, c'est mal), j'ai parcouru la FAQ d'oracle mais je suis un peu à court d'idée et je ne sais plus ou chercher :(

Merci d'avance pour toutes les idées ou suggestions que vous pourriez avoir :)

Posté : 19 nov. 2006, 19:10
par Ajoloca
Bonjour Ryle,

Je ne sais pas si ça peux t'aider, ce sont de vieux souvenirs mais je crois qu'avec Windows il y avait une histore de clé de registre qui n'avait pas la même valeur que celle de TNS_ (Dos). Je vais essayer de trouver mes vieilles notes (c'était pour du C, PRO*C) mais ça devrait donner une indication.

Posté : 19 nov. 2006, 21:07
par Ryle
Je prends si tu arrive à remettre la main dessus ! :)

Depuis le temps que je m'arrache les cheveux sur ce truc là, je suis prèt à essayer n'importe quoi :)
(pour l'instant je transforme à la volée quelques uns des caractères spéciaux en entités html pour les stocker, mais c'est franchement pas l'idéal surtout quand je veux les modifier...)

Posté : 21 nov. 2006, 02:48
par Ajoloca
Bonjour Ryle,

J'ai pas mis la main sur les notes (je continue à chercher).

J'ai envoyé un mail à un ex-collegue qui est DBA à l'AP-HP pour lui exposer le PB, j'attends sa réponse et te tiens au courant.

Posté : 21 nov. 2006, 18:35
par Ryle
Merci, c'est super sympa !! :)

format ISO 8859-15

Posté : 09 déc. 2006, 11:01
par Xtof-92
pour avoir les nouveaux caractères euros ou oe il faut pas etre en
AMERICAN_AMERICA.WE8ISO8859P1 (ISO 8859-1) il faut être en ISO 8859-15
donc
AMERICAN_AMERICA.WE8ISO8859P15

je sais pas si cela t'aide, mais bon

A+

Posté : 11 déc. 2006, 16:11
par Ryle
Vi vi, j'en suis bien conscient, mais même si je ne dispose pas du caractère euro en base, le paramétrage précédent permettait d'encoder et de désencoder ce caractère, quelque part entre php et oracle, pour le restituer convenablement..

J'essaye de retrouver ce qu'il faut paramétrer pour que cela puisse se faire à nouveau. Le site et la base n'ont pas changé, seul les environnement (et du coup les configs) ont changé.. et impossible de savoir ce qui avait été fait sur la précédente machine pour résoudre ce problème qu'ils avaient rencontré également :(