# PHP > PHP & Base de donnes > [SQL-Server] Les accents ne passent pas entre MS SQL et PHP ?

## stephane9422

Bonjour. 
Voila : je remplis une liste droulante via PHP en xcutant une procdure stocke dans ma BD SQL Server 2000. Les accents ne passent pas dans ma liste, j'ai des caractres tout bizarres. J'ai essay d'encoder la page web en diffrents "charsets" (ISO-8859-1, UTF-8, ...) mais rien n'y fait.
Grrrrrrr
a m'nerve.

Merci
Steph

----------


## WOLO Laurent

Nous allons pour un premier temps circonscrire le domaine du problme:
SQL Serveur ou php ?
Que vous donnes l'excution de la mme procedure stocke dans l'analyser de requette ?

----------


## stephane9422

Bonjour et merci de rpondre. L'excution de la requte (de la procdure stocke) dans l'analyseur de requte renvoie un rsultat correct : les caractres accentus apparaissent normalement

----------


## WOLO Laurent

Il ressort donc qu'il s'agit d'un problme php et non SQL Serveur.
J'invite donc les spcialistes php.

----------


## yiannis

bonjour,

as tu essaye la fonction htmlentities() sur les resultats de ton query?
http://fr.php.net/manual/fr/function.htmlentities.php

----------


## stephane9422

J'ai essay la fonction htmlentities, mais a ne change rien. Par contre, et c'est tonnant, l'encodage CP850 (IBM 850) affiche correctement la liste... mais pas le reste de la page.

Merci  WOLO Laurent

----------


## yiannis

c'est vraiment bizarre car l'encodage CP850 est le latin1 Dos   :8O:  

peut etre en essayant de transformer tous les caracteres speciaux en code ascii?

----------


## GregPeck

J'ai dj eu ce problme, mon sql serveur me renvoyais toujours tout en utf8, quoi que je fasse, donc j'ai fait a:



```
echo utf8_decode&#40;$variable&#41;;
```

----------


## yiannis

oui mais dans son cas il ne lui renvoie pas de l'utf8 mais du CP850 qui est le format latin1 DOS => ISO-8859-1.

donc peut etre en faisant:


```
echo utf8_encode&#40;$variable&#41;;
```

et en mettant l'encodage de la page en uft8 ?

----------


## stephane9422

Yiannis et GregPeck, je viens d'essayer avec utf8_decode, page encode en ISO-8859-1, et avec utf8_encode(), page encode en UTF-8, nada. C'est toujours pareil ! Soit j'ai une virgule  la place du , ou un ?  la place du .
 :8O:   :8O:   :8O: 

Toutefois, je dois dire que le champ tait paramtr dans SQL Server en Latin 1 Gnral, ceci explique cela. Je l'ai remis en format par dfaut, qui est "French", c'est pareil, sauf que cette fois les caractres ne sont mme pas remplacs.

----------


## siddh

et la ta page est encore en 8859-1 ?

----------


## stephane9422

Oui toujours. Je fais des tests en changeant dans SQL Server ce qu'ils appellent le classement. En mettant un classement SQL_Latin1_General_CP1251_CI_AS (Case Insensitive, Accent sensitive), j'obtiens une liste avec les lettres mais sans les accents, ce n'est dj pas si mal. Je pense donc qu'il s'agit d'un problme d'encodage par SQL Server et non d'une interprtation errone de PHP. Mon message a peut-tre t dplac trop vite du forum MS SQL ?

----------


## yiannis

> Je pense donc qu'il s'agit d'un problme d'encodage par SQL Server et non d'une interprtation errone de PHP.


je le pense aussi   ::wink::

----------


## WOLO Laurent

> Je pense donc qu'il s'agit d'un problme d'encodage par SQL Server et non d'une interprtation errone de PHP. Mon message a peut-tre t dplac trop vite du forum MS SQL ?


Dans la msure o le problme ne se pose pas dans Query Analyser, comment pouvez vous rechercher le problme du ct de SQL Serveur ?
Quelle gachie en temps ?
C'est vraiment une perte de temps !!!!

----------


## yiannis

> Dans la msure o le problme ne se pose pas dans Query Analyser, comment pouvez vous rechercher le problme du ct de SQL Serveur ?
> Quelle gachie en temps ?
> C'est vraiment une perte de temps !!!!


excuse moi, je ne connais rien a ms sql serveur, mais dans mysql si tu as un encodage par exemple japonais, lorsque tu feras ton query les resultats seront retourne avec l'encodage japonais->donc pas d'erreur. Or si tu affiches cela sur une page avec un encodage iso-quelquechose, la tu verras des problemes sur les caracteres. Euh, je me trompe???

de notre cote, nous avons essaye pas mals de chose depuis hier avec stephane9422, sans succes, alors que quand il change l'encodage du serveur sql, il obtient des resultats.

Encore une fois, je me trompe peut etre (n'ayant pas la science infuse en sql, ni meme en php)    ::wink::

----------


## WOLO Laurent

Dans le msure o dans Query Analyser qui est aussi une application cliente pour un serveur de Base de donnes, le problme ne se pose pas !
Pourquoi devait-il se poser pour un serveur php qui est aussi un client pour le mme serveur de base de donnes ?
C'est l que je positionne mon raisonnement.

----------


## yiannis

Ok
J'avoue que je suis sur le probleme depuis hier et franchement je ne vois pas la soluce.
Pourrais-t-on avoir le code de la page ou la liste est affichee ?

----------


## stephane9422

je ne veux pas polmiquer sur SQL Server ou PHP, juste essayer de rsoudre le problme. Voici le code de la page en question:

```

```

Cette page a un en-tte en ISO-8859-1. C'est le champ CT_Classement qui pose problme. Pour ceux qui connaissent, CT_Xxxxx, c'est une bd SAGE sous SQL...
Merci encore  ::D:   ::D:   ::D:

----------


## stephane9422

Je vois qu'on laisse tomber. J'ai toujours mon problme et je ne trouve vraiment aucune aide nulle part.
Merci quand mme
Steph

----------


## yiannis

je suis desole pour toi stephane 9422, mais j'ai essaye tous ce que je pouvais et ne trouve pas la solution donc je passe la main en esperant que quelqu'un puisse te donner un coup de main   ::oops::

----------


## stephane9422

Merci  toi Yiannis   ::):   ::):

----------


## stephane9422

*Eurka !* 
Solution trouve sur un forum : dans le menu Dmarrer, Groupe de programmes Microsoft SQL Server, lancer "Utilitaire Rseau client", et dcocher "Conversion automatique ANSI vers OEM" dans l'onglet Options DB-Library. Ainsi les donnes sont renvoyes en ANSI, ce n'est pas parfait, mais en spcifiant le jeu de caractres adquat, toute la page est correctement encode, mme si ce n'est pas la panace.
En tout cas, c'est bien SQL Server qui renvoyait des donnes en OEM, il fallait juste connatre cette option.  
A plus pour de nouvelles aventures !
Steph

----------


## yiannis

::bravo::   ::applo::   ::chin::   ::king::  
bravo et je suis vraiment content pour toi

----------


## berceker united

Dire que j'avais ce problme hier soir chez moi. Ce qui es plus bizarre c'est qu'en asp il n'y a aucun problme. un  saisie affiche  dans SqlServer et sur la page asp aussi sans traitement. En php : un  saisie affiche  dans SQLServer mais soit , ou '. 
Bon ben c'est une technique  tendre. Dans la FAQ PHP  :;):

----------


## neoray

Un grand merci  ::king::  ::king::  ::king::   tout cette debuache d'energie pour trouver la solution. J'ai eu moi aussi le meme problme comme beaucoup en passant de apache 1  apache 2, ok sa vient de du serveur sql mais apparement apache faisait un traitement avant.

@+

----------


## HALOMOTO

J'ai le mme problme .. mais .. l'option "Conversion automatique ANSI vers OEM" est dj dcoche chez moi  ::(: 
Une autre solution ?

----------


## berceker united

Est-ce toujours sur la version 2k ?

----------


## HALOMOTO

oui les mmes conditions,
un SQL Server 2000, PHP5
Les accents en base font apparatre des ','  ..etc.

----------


## berceker united

> oui les mmes conditions,
> un SQL Server 2000, PHP5
> Les accents en base font apparatre des ','  ..etc.


Comme cela fait longtemps j'ai pas tout les dtails en tte mais il se pourrait que a soit li  ta collation. Tu peux dfinir qu'un  est un  s'il le cherche ou  = e lors du recherche donc dans la configuration serveur il faut voir si c'est pas li  cela.

----------


## HALOMOTO

Quelquechose comme 
select * from utilisateur where prenom like 'Grard';
et
select * from utilisateur where prenom like 'Gerard';

ne me donne pas la mme chose. 

Comme collation j'ai du French_CI_AS

----------


## berceker united

Donc c'est que ta collation que tu as slectionn fait que tu es sensible aux accents. Je crois qu'il faut prendre *French_CI_AI*
A tester !

----------


## HALOMOTO

French_CI_AI = casse insensitive et accent insensitive je pense

Ok j'essaierai merci

----------


## HALOMOTO

Nevermind, l'option tait en faite  ON, mais tant donn que je n'avais pas les droits, l'option s'affichait par dfaut sur off mais tait en faite sur ON ..

"Conversion automatique ANSI vers OEM"  OFF => plus de soucis.

merci, rsolu.

----------


## berceker united

Un affaire bien rsolu  ::king::

----------


## Seb33300

> Nevermind, l'option tait en faite  ON, mais tant donn que je n'avais pas les droits, l'option s'affichait par dfaut sur off mais tait en faite sur ON ..
> 
> "Conversion automatique ANSI vers OEM"  OFF => plus de soucis.
> 
> merci, rsolu.


Bonjour,

j'ai le mme problme et la case "Conversion automatique ANSI vers OEM" n'est pas coch.

Comment savoir si on a les droits suffisant pour afficher la vrai valeur de cette option ?

----------

