PHP-MySQL problemes encodage hebreu et autres [Résolu/Fermé]

Signaler
-
 bloodipunk -
Bonjour a tous,

Cela fait longtemps que je parcours ce site extrêmement bien fait. J'y ai toujours trouvé les réponses a mes problèmes (c'est d'ailleurs pour cela que je n'y suis pas présent ...). Mais la je ne trouve pas ce qui pourrais expliquer ce qui me préoccupe actuellement:

Je travaille sur un projet multi-language ou l'on doit pouvoir saisir toutes sortes de caractères dans la base de données MySQL, anglais, hébreu, russe et français entre autres...
J'ai donc déclaré la base de donnée et toutes les tables en UTF8_unicode_ci,
Toutes les pages du site sont en XHTML 1.0 avec <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>.

Lorsque je saisie de l'hébreu ou du russe dans PHP-MyAdmin, la table est mise a jour correctement et lorsque je regarde le contenu (toujours avec PHP-MyAdmin) tout est parfait, j'y vois de l'hébreu et du russe (même si je le comprends pas...:D...).
Mais lorsque je fait la même chose via les formulaires des pages du site, la c'est la catastrophe... J'ai traqué les données tout le long du processus et elles sont correctes jusqu'à l'ajout dans la base de données par requête mysql_query ou cela se transforme en caractères complètement bizarres dans la base...
EX: lorsque je saisi "ברוכים הבאים לאתר של א. ישראלי," dans PHP-MyAdmin, c'est bien ce que je vois ensuite dans PHP-MyAdmin, mais dans la page Web, on voit "?????? ????? ???? ?? ?. ??????," Par contre si je saisi la même phrase dans la page Web, dans PHP-MyAdmin je vois "ברוכי×? הב×?×™×? ל×?תר של ×?. ישר×?" et de retour dans la page Web je vois "ברוכי�? הב�?י�? ל�?תר של �?"...

Toutes les zones que je mets dans la base sont systématiquement nettoyées avec mysql_real_escape_string(). J'ai aussi essayé de faire des utf8_encode et utf8_decode, des convert(... using UTF-8) etc.... Mai rien ne marche comme je voudrais.
J'ai l'impression que ce que je vois dans la base SQL est en fait recodé en UTF-8 (avec des "é" a la place des accents ou des "кр" pour le russe, dans PHP-MyAdmin, comme si la table etait en UTF-8 et la page PHPMyAdmin en ISO-8859-1 (alors qu'elle est aussi en UTF-8 ???!!!)
Bref, j'y comprends plus rien !... Désolé du long message, mais je voulais être le plus clair possible... A L'AIDE, Please, quelqu'un pourrait il m'aider.....

Merci d'avance de votre temps et de votre aide.

9 réponses

la reponse est sur le message 21 pour ceux qui la cherche toujours...

Merci a Grizzly et Ashus pour leur aide inestimable.....
4
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
547
Date d'inscription
vendredi 23 janvier 2009
Statut
Membre
Dernière intervention
19 février 2009
101
Si tu veu affiché quelque chose dan ta base de données, tu fais "echo $ta_variable"

Ben mais ca devant : "echo htmlentities($ta_variable)"

Messages postés
547
Date d'inscription
vendredi 23 janvier 2009
Statut
Membre
Dernière intervention
19 février 2009
101
Et rajoute ca tout en haut de ta page :

@header('Content-type:text/xml; charset=utf-8');

C du PHP
Merci de votre rapidité, mais évidement, j'ai déjà utilise le htmlentities() et rien n'y fait...

Mais pourquoi cela marche avec PHP-MyAdmin, je saisi de l'hébreu ou du russe et je vois de l'hébreu ou du russe...
Pourquoi pas en passant par les pages Web ??? Je me dis qu'il manque un convert ou qq chose comme ca, j'ai fouillé un peu les sources de PHP-MyAdmin et ils en font des tonnes de conversion sur les données.... mais laquelle serait la bonne ???

Encore merci d'avance

PS: j'essaye tout de suite le truc du @header et je vous dis....
Messages postés
4605
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
30 avril 2020
1 270
Les fichiers eux mêmes sont ils encodés en utf8 ? Erreur courante. Je me suis moi même pris longtemps la tête dessus par le passé.

Par ex. sous notepad++ : format > convertir en utf8

Tous les bons éditeurs gèrent l'encodage des fichiers.
Messages postés
4605
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
30 avril 2020
1 270 > bloodipunk
t'es en Asie aussi ? => Non, en france métropolitaine ...
sauf la conversion des sources en utf-8 qui ne marche vraiment pas => C'est pourtant indispensable

Correction à mes propos précédents :
La fonction mysql_set_charset() est la meilleure façon de modifier le jeu de caractères. Il n'est pas recommandé d'utiliser la fonction mysql_query() avec une requête du type SET NAMES .. pour cela.

Ah ce manuel PHP, une ressource infinie :o) J'en ferais pas pour autant un livre de chevet ...
>
Messages postés
4605
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
30 avril 2020

sauf la conversion des sources en utf-8 qui ne marche vraiment pas => C'est pourtant indispensable

Mais comment fait PHPMyAdmin alors.... les sources sont tous en utf-8 aussi ???????
Messages postés
4605
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
30 avril 2020
1 270 > bloodipunk
non. mais là, c'est hors de ma portée.
je ne fais que te regrouper des infos fouinées sur la toile et de ma propre expérience.

Mais déjà, le fait d'établir la connexion en urf8 devrait régler les soucis, vu que le reste semblait ok d'après les infos que tu avais fournies (a confirmer).
>
Messages postés
4605
Date d'inscription
lundi 7 novembre 2005
Statut
Contributeur
Dernière intervention
30 avril 2020

OKay, je regarderai tout ca et te tiens au courant.... en temps reel...

A plus tard.
> bloodipunk
Me revoilà et avec un BIG ENORME SMILE :)

grâce a toi, vénéré Grizzly et au superbe effort d'assistance dont tu as fait preuve..... En effet c'était TOUT bête !!! et grâce a tes conseils et au lien que tu as donne j'ai eu la toute simple solution : C'était bien l'ouverture de la base qui n'était pas complète il manquait la ligne d'affectation des set de caractères, suis-je bêta...Et voila le travail:

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn);

J'ai tout de même utilisé MySql_query plutot que MySql_set_charset () car d'apres l'article du manuel PHP cela semble être la manière la plus complète et la plus efficace d'assigner TOUS les sets de caractères possibles utilisés dans l'appli Web, cote client et serveur.... Quelques soit les cas de figures possibles, le rendu sera donc toujours celui attendu.

10.000.000.000.000.000.000.000.000.000.000.000 de Merci !!!!!!!

Et que vive la communauté internet et la solidarité des internautes !
Messages postés
547
Date d'inscription
vendredi 23 janvier 2009
Statut
Membre
Dernière intervention
19 février 2009
101
Sinon ca :

htmlentities($ta_variable);ENT_QUOTES;

bon ben @header('Content-type:text/html; charset=utf-8'); ne change strictement rien... malheureusement...

J'ai vraiment l'impression que cela ressemble a un problème de codage de la base MySql par rapport a mes pages, mais je tourne en rond, rien n'y fait, ni htmlentities(), ni htmlspecialchars() ni quoique ce soit que j'ai essayé...

J'ai aussi remarqué que lorsque je fait un utf8_encode() sur la zone a ajouter a la table, le résultat est le goupe de caracteres bizarres que je vois ensuite dans PHP-MyAdmin, of course... Comme si il y avait recodage....
De plus, pour le russe, ca irait, mais des chaines de caractères sont tronqués (comme pour les accents francais) vu qu'elles sont codees sur 2 caracteres dans la table.... Je pensais que c'etait a ca que servait le UTF-8... Faut-il compter le double de taille de la zone saisie a stocker dans la base (20 car dans la base pour 10 saisis ???!!!) dans ce cas ?...

Ca me paraissait bien plus simple, ces histoires d'encodages, surtout avec le UTF-8..... Bon, ben, j'y retourne...
Messages postés
547
Date d'inscription
vendredi 23 janvier 2009
Statut
Membre
Dernière intervention
19 février 2009
101
Alors là je ne sais pas, du tout ... J'avais le meme probleme que toi, avec ces losanges noirs, qui remplacé mes accents, et j'ai mis ce que je t'ai dit plus haut et maintenant ca passe sans probleme :-s ...

Dsl pour toi je n'ai pas d'autre solution
Me revoila, avec plus de détails sur mon problème:
j'ai effectué exactement la même saisie une fois via PHP-MyAdmin et une autre fois via un formulaire du site
1- ligne saisie dans PHP-MyAdmin et
2- ligne saisie via le formulaire XHTML:
Ci-dessous ce qu'on voit dans PHP-MyAdmin :
--------------------------------------------------------------------------------------------------------------------------------------------------------------
1| ברוכים הבאים לאתר של א. ישראלי, | text with ' " / \; & | Отель Чор Чанг радушно открывает перед вами
--------------------------------------------------------------------------------------------------------------------------------------------------------------
2|ברוכי×? הב×?×™×? ל×?| text with ' " / \; & | Отель Чор Ч
| תר של ×?. ישר×? | |
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Et voici ce qu'on vois dans la page web de visualisation XHTML
--------------------------------------------------------------------------------------------------------------------------------------------------------------
1| ?????? ????? ???? ?? ?. ??????, | text with ' " / \; & | ????? ??? ???? ?????
--------------------------------------------------------------------------------------------------------------------------------------------------------------
2|ברוכי�? הב�?י�? ל�?תר של �?. ישר�? | text with ' " / \; & | Отель Чор Ч
--------------------------------------------------------------------------------------------------------------------------------------------------------------

Je reprécise que toutes mes pages Web sont en UTF-8, que la base et toutes les tables sont en UTF8_unicode_ci. toutes les zones sont simplement nettoyées avec mysql_real_escape_string() avant la maj de la table.
j'ai deja essayé de faire des utf8_encode et decode, des htmlentities, et autres htmlspecialchars(), de faire un CONVERT(, using utf-8) dans l'instruction de maj de la base.
La GRANDE Question est: Pourquoi cela fonctionne très bien dans PHPMyAdmin et pas dans mes pages, et surtout quelle est la solution, quelles conversions sont a faire que j'aurai raté ???

HELP... A L'AIDE, je suis bien bien dans la mouise......