probleme de codage entre php et mssql (base en utf8)

tomtom
Invité n'ayant pas de compte PHPfrance

10 août 2006, 17:04

Bonjour,

je m'arrache les cheveux!! besoin d'aide...

comme l'indique le titre, j'essaie d'insérer des données dans une base codée en utf8 depuis php.

la requete est:

$requete="UPDATE ma_table SET mon_champ='$var' WHERE id=$id";
mssql_query($requete);

bien entendu, ca ne marque pas dès qu'il y a des accents, des cotes ou ce genre de caractères qui te pourrissent la vie.

j'ai essayé d'utf8_encoder, d'ut8_encoder et j'avoue avoir aussi un peu mb_convert_encodinger, ca ne me regle pas mon problème.
Je ne trouve pas de sujet clair là dessus, si kkun a une piste....

(ne me dites pas de passer sous mysql ou de changer l'encodage de ma base, j'ai pas le choix de ce coté là)

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

10 août 2006, 17:53

Salut,

Juste un truc pour la prochaine fois, ce serait cool d'utiliser les balises
 pour du PHP, des majuscules en début de phrase et des mots entiers plutôt que des abbréviations. Ça facilite la lecture (et je suis sûr que tu veux que ton message soit lu par le plus grand nombre ;))

Est-ce que tu connais l'encodage de [b]$var[/b] ? s'il provient d'un formulaire HTML alors assure-toi que l'encodage de la page HTML est bien UTF-8. De plus, assure-toi bien également que les apostrophes sont correctement échappées, par exemple avec
[code]$var = str_replace("'", "''", $var);[/code]

Si tu souhaites transformer du ISO-8859-1 en UTF-8 c'est bien utf8_encode() qu'il te faudra utiliser, mais le mieux est vraiment de s'assurer que la page HTML est en UTF-8.

tomtom
Invité n'ayant pas de compte PHPfrance

10 août 2006, 18:31

Désolé pour la balise, pour le coup j'ai oublié. Pour le reste, ce n'est qu'une question de mauvaise habitude. J'essaie de la jouer propre sur ce coup ci...

Ma page HTML est en UTF8, là n'est pas le problème. Même en remplaçant ma variable par du texte en dur, ça ne me génère pas ce que je veux.
ex:
$requete="UPDATE ma_table SET mon_champ='é' WHERE id=$id";
mon_champ a pour valeur 'Ù' après l'exécution de cette requête.

J'ai vu ce code quelque part (je ne retrouve pas le site et c'est l'info la plus intéressante que j'ai déniché jusqu'ici) :
$var=mysql_real_escape_string(utf8_encode($var))
A priori ça règle le problème...sous mysql! Mais il n'y a pas d'équivalent pour SQL Server