OVH Cloud OVH Cloud

pb accent sql server

3 réponses
Avatar
Bertrand
Bonjour

je dois utiliser php pour accéder à plusieurs SGDB dont SQL Server 2000

mon pb se situe au niveau des accents :

sous SQL server j'ai par exemple cette chaine : éàè qui me donne avec php
,.S

sachant que je ne dois pas toucher au paramètrage de php ni de SQL server,
comment m'y prendre ?

Merci

3 réponses

Avatar
Olivier Miakinen

mon pb se situe au niveau des accents :


Problème classique d'encodages différents.

sous SQL server j'ai par exemple cette chaine : éàè qui me donne avec php
,.S


Donc l'encodage des chaînes utilisé dans ton SQL server n'est pas le
même que celui déclaré dans tes pages PHP. Dans ce genre de situation,
il y a au moins trois solutions possibles :
- changer l'encodage dans le SQL server ;
- changer l'encodage déclaré dans tes pages PHP ;
- transcoder les caractères d'un encodage dans l'autre.
Il y a aussi d'autres possibilités, comme par exemple changer les deux
encodages à la fois, vers un standard commun (Unicode ou UTF-8).

Dans tous les cas, avant de pouvoir *modifier* quoi que ce soit, il faut
*savoir* quels sont les encodages utilisés. Donc, pour une chaîne
donnée, mettons $chaine = "àâäéèêëîïôöùûü", tu exécutes ce petit code et
tu viens nous donner le résultat :

echo $chaine;
for ($idx = 0; $idx < strlen($chaine); $idx++) {
echo ' '.ord(substr($chaine, $idx));
}

Attention, les caractères résultants n'appartenant peut-être pas aux
encodages autorisés dans les news (pour le echo $chaine), le mieux
serait que tu nous donnes une url vers la page web correspondante.

sachant que je ne dois pas toucher au paramètrage de php ni de SQL server,
comment m'y prendre ?


Si tu ne peux changer aucun des deux encodages utilisés, il te restera
la solution de transcoder. Mais bon, tu décideras de cela plus tard, la
priorité étant de faire un état des lieux.

Avatar
Bertrand
Dans tous les cas, avant de pouvoir *modifier* quoi que ce soit, il faut
*savoir* quels sont les encodages utilisés. Donc, pour une chaîne
donnée, mettons $chaine = "àâäéèêëîïôöùûü", tu exécutes ce petit code et
tu viens nous donner le résultat :

echo $chaine;
for ($idx = 0; $idx < strlen($chaine); $idx++) {
echo ' '.ord(substr($chaine, $idx));
}


le résultat :
àâäéèêëîïôöùûü 224 226 228 233 232 234 235 238 239 244 246 249 251 252

sachant que je ne dois pas toucher au paramètrage de php ni de SQL
server,


comment m'y prendre ?


Si tu ne peux changer aucun des deux encodages utilisés, il te restera
la solution de transcoder. Mais bon, tu décideras de cela plus tard, la
priorité étant de faire un état des lieux.


en fait je souhaiterais modifier à la volée le type d'encodage utilisé (si
possible). ICONV ??


Avatar
Olivier Miakinen

Dans tous les cas, avant de pouvoir *modifier* quoi que ce soit, il faut
*savoir* quels sont les encodages utilisés. Donc, pour une chaîne
donnée, mettons $chaine = "àâäéèêëîïôöùûü", tu exécutes ce petit code et
tu viens nous donner le résultat :

echo $chaine;
for ($idx = 0; $idx < strlen($chaine); $idx++) {
echo ' '.ord(substr($chaine, $idx));
}


le résultat :
àâäéèêëîïôöùûü 224 226 228 233 232 234 235 238 239 244 246 249 251 252


L'encodage semble parfaitement compatible avec ISO Latin1. Essaye
simplement de rajouter ceci au tout début de ton script PHP :

<?
header('Content-Type: text/html; charset=iso-8859-1');
?>

en fait je souhaiterais modifier à la volée le type d'encodage utilisé (si
possible). ICONV ??


Oui, tu pourras utiliser iconv si tu veux que ta page soit en autre
chose qu'en Latin1, par exemple en UTF-8.


Par ailleurs, tu as un autre problème d'encodage, mais dans ton Outlook
Express : il ne signale pas l'encodage utilisé. Pour corriger cet autre
problème, vois la réponse qu'a faite Denis Liégeois sur fr.usenet.8bits.
<http://groups.google.fr/groups?selmB599437%241%40neottia.net>.