problemes de codage caracteres russes

Or3_74
Invité n'ayant pas de compte PHPfrance

20 avr. 2008, 20:42

Bonjour,

J'ai quelques problèmes avec un site en Russe.
J'ai une administration pour que je puisse insérer du texte dans une base de données mysql.
Ma base est en utf8-bin, les scripts php en charset=utf-8.
Ca fonctionne je dirai partiellement, car je n'ai que quelques caractères russes qui ne passent pas et sont remplacés par des ???.


Merci bcp de votre aide !

Aurélie

Or3_74
Invité n'ayant pas de compte PHPfrance

21 avr. 2008, 10:40

Je viens de trouver la solution ! Surprised
Donc pas la peine de mettre de l'utf-16 apparemment.

J'ai tout simplement fait un mysql_query("SET NAMES utf8") avant de faire ma requête "INSERT INTO"....et mes textes sont tous niquels.....
Alors pourquoi, ca je ne sais pas...mais çà fonctionne !

Voilà si çà peut aider des personnes....

Aurélie

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

21 avr. 2008, 14:25

Merci, c'est sympa d'être revenue poster la solution.

Je met en Résolu

A+

Eléphant du PHP | 124 Messages

23 avr. 2008, 03:24

J'ai tout simplement fait un mysql_query("SET NAMES utf8") avant de faire ma requête "INSERT INTO"....et mes textes sont tous niquels.....
Alors pourquoi, ca je ne sais pas...mais çà fonctionne !
Ta base et ton script est en UTF-8 soit.
Mais est-ce-que les caractères l'étaient. Genre même avec une page en UTF-8 les caractères posté avec $_POST pouvait être dans un autre encodage.

Ensuite est-ce-que la communication entre ton client et ton serveur étaient en UTF-8 ?
Si après SET NAMES, tu n'as aucun problème c'est à mon avis que le problème était la valeur de la connections, qui est différente de la collation de ta base ou de celle de tes pages WEB.

Pour donner un exemple précis, imaginons que ta deux russes derrière une glace qui ne laisse pas passer les sons. Leur seule chance de communiquer c'est de se parler avec les mains.

Code : Tout sélectionner

SET NAMES indique ce qui est dans la commande SQL que le client envoie. Par conséquent, SET NAMES cp1251 indique au serveur : ``les futurs messages fournis par ce client seront dans le jeu de caractères cp1251'' et le serveur est libre de les traduire dans son propre jeu de caractères, éventuellement. La commande SET NAMES 'x' est équivalente à ces trois commandes : mysql> SET character_set_client = x; mysql> SET character_set_results = x; mysql> SET character_set_connection = x;
---