php mysql et unicode

php mysql et unicode - PHP - Programmation

Marsh Posté le 05-09-2003 à 09:52:32    

Bonjour,
je suis en train de réalise un site dynamique de classement pour differentes aplications, et je voudrais qu'ils soient en plusieurs langues.
 
Pour prendre en charge les différents characteres, la norme uft-8 qui est une version d'unicode si je ne me trompe pas, a l'air la plus compléte, mais une fois enregistré dans la base mysql, tout est convertie en &#---; et le nombre qu'il y a à la place de --- ne corespond pas avec ceux donnée sur le site officiel  
http://www.unicode.org/charts/, serait ce une autre norme?  
 
je connais ce systeme des &#---; mais je ne m'étais jamais posé la question avant savoir qu'elle norme c'était... :sarcastic:
 
peut être pouriez vous éclarer ma lanterne ;)

Reply

Marsh Posté le 05-09-2003 à 09:52:32   

Reply

Marsh Posté le 05-09-2003 à 10:01:27    

ok j'ai compris, il y en a un ou le nombre en hexa l'autre en decimal...
 
mais si vous avez des tuyaux pour ce genre de travail, piege classique ou tout le monde tombe dedans, vos conseils sont les bienvenues ;)

Reply

Marsh Posté le 05-09-2003 à 10:21:10    

Cela peut venir d'un paramétrage de MySQL. Sur un projet perso, je stocke aussi des données UTF-8 dans MySQL. Mais aucune conversion n'est exécutée (du moins je pense), contrairement au cas que tu décris.


---------------
Le site de ma maman
Reply

Marsh Posté le 05-09-2003 à 10:24:03    

merci.
 
Moi tout les caracteres qui sorte des caractères classiques sont convertie en &#---; .
 
 
Si ils sont conserve en uft-8, les caractéres chinois par exemple, ( ou russe.. ;) ) quand tu edite le contenu de ta base avec php my admin, tu les visualises ou tu as un code à la place?

Reply

Marsh Posté le 05-09-2003 à 10:37:17    

c'est la lutte pour avoir son unicode
de mon expérience en python, je pense que ça doit fonctionner pareil ailleurs
 
l'utf-8 est une mise en oeuvre technique de l'unicode, donc moi quand je récupère de l'utf-8,, je dois le convertir en unicode abstrait
 
s = unicode("Benoît", 'utf-8')
 
ça me permet un stockage parfaitement indépendant
 
et après je
 
s.encode('une locale' 'replace') # replace pour passer outre les caractères non tradutibles

Reply

Marsh Posté le 05-09-2003 à 10:39:10    

merci.
 
oui en effet c'est ca qui me chagrine, c'est que j'avais cru comprendre que le uft-8 est une interpretation de l'unicode mais c'est pas la seule alros en effet comment etre sur que ce sera reconnu partout.
 
quelqu'un sait si il y a une fonction similaire en php?
 
je connais utf8_encode() qui convertit une chaîne ISO-8859-1 en UTF-8.. mais apres nexen ne me donne rien de tres proban...


Message édité par naeco le 05-09-2003 à 10:42:52
Reply

Marsh Posté le 05-09-2003 à 13:30:05    

Non, c'est pas la seule. Il y a aussi l'utf-16 avec le problème du big/low endian. Au total 3 encodages.
C'est le BOM (s'il est inclus) qui te dit quel encodage est utilisé.
EF BB BF pour UTF-8.
FF FE ou FE FF pour UTF-16 (selon l'endian).


Message édité par Cherrytree le 05-09-2003 à 13:37:08

---------------
Le site de ma maman
Reply

Marsh Posté le 05-09-2003 à 13:34:44    

Naeco a écrit :

merci.
 
Moi tout les caracteres qui sorte des caractères classiques sont convertie en &#---; .
 
 
Si ils sont conserve en uft-8, les caractéres chinois par exemple, ( ou russe.. ;) ) quand tu edite le contenu de ta base avec php my admin, tu les visualises ou tu as un code à la place?


Je visualise les caractères tels que ASCII les décode. C'est pas très lisible. Un caractère accentué comme 'é' occupe alors (ou semble occuper) deux caractères, et je visionne un truc genre : 'Ã%', bien illisible donc.


---------------
Le site de ma maman
Reply

Marsh Posté le 09-09-2003 à 16:01:07    

donc tu utilise utf8_decode() pour afficher le contenu exploitable de ta table?
 
 
Comment verifier que les caracteres tapés sont dans la liste a...z A...Z 0...9 ?
 
et comment convertir une chaine de caractères en &#--; sans la paser dans la base? je n'ai pas trouvé de fonction.
 
et pour la création de table, il faut absolument que les caratere soit de la table ASCII?
 
merci par avance ;)

Reply

Marsh Posté le 10-09-2003 à 15:06:48    

Même pas. C'est transparent pour moi. Le stockage et la récup' se font sans accroc, sans traitement particulier.


---------------
Le site de ma maman
Reply

Marsh Posté le 10-09-2003 à 15:06:48   

Reply

Marsh Posté le 10-09-2003 à 15:07:28    

Naeco a écrit :

Comment verifier que les caracteres tapés sont dans la liste a...z A...Z 0...9 ?
 
et comment convertir une chaine de caractères en &#--; sans la paser dans la base? je n'ai pas trouvé de fonction.
 
et pour la création de table, il faut absolument que les caratere soit de la table ASCII?
 
merci par avance ;)


J'en sais fichtre rien. Mais ça m'intéresse.


---------------
Le site de ma maman
Reply

Marsh Posté le 12-09-2003 à 12:01:03    

Bon alors, pour atteindre mon but, j'ai contourné le problème, les noms des tables sont stokées pour pouvoir les avoir en plusieurs langues et j'ai fais une table pour la traduction de tel sorte que pour traduire par exemple "toto par en vacance" je note :
 
$data["toto pas en vaccance"]
 
sinon je convertie tout avec uft8_encode() et je décode a la sortie pour avoir tous les caracteres.
 
par contre es ce qu'il existe pas une posibilité pour apliquer une fonction a tous les résultats d'une requettes mysql?
 
mon but est de ne pas a avoir a noté uft8_decode($data["toto pas en vaccance"]) a chaque fois mais uniquement $data["toto pas en vaccance"] et que la fonction uft8_decode() soit automatiquement apliqué...
 
merci pour votre aide... :hello:
 
A+

Reply

Marsh Posté le 07-11-2003 à 08:35:26    

Bonjour, je reviens à la charge avec mon problème... ( et oui j'ai eu du boulot ailleur donc je n'ai pas trop toucher à mon projet ....  :o )
 
Donc à l'heure actuelle, j'ai le champs d'une table où j'enregistre trois chaines de charactères qui peuvent être n'importe quel type de caractere unicode que je concatene entre des "_" et le resultat étant apliqué à utf8_encode().
 
au décodage, le comportement est assez marant (enfin ca dépend de quel point de vu on se place lol)
 
en effet les caracteres russe sont décodé corectement si je n'utilise pas la fonction utf8_decode() et les caractères latin accentué aparaissent corectement uniquement si j'utilise cette fonction! (pourtant donc j'encode tout de la même manière!)
 
Pour ce decodage, je vais donc un utf8decode() puis un explode() avec "_". je pense que ca viens de la, car les données que j'enregistre et que je réedite avec uft8_de/encode() sans concatènation ne presentent pas ce problème...
 
Si quelqu'un a une idée, merci par avance!

Reply

Marsh Posté le 07-11-2003 à 10:05:19    

ok désolé, en fait j'avais oublier de faire un utf8_decode à un endroit que je n'avais pas factorisé, desolé ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed