[XML/php/Mysql] Caractere chinois

Caractere chinois [XML/php/Mysql] - XML/XSL - Programmation

Marsh Posté le 14-07-2009 à 14:46:21    

Bonjour
 
j'ai un soucis avec l'affichage de caractere chinois.
 
A l'aide de mysql, j'insere des traductions en chinois : par exemple 中国 (qui veut dire Chine en chinois pour ceux que ca interesse  :D )
 
Ma base est encodée en UTF-8.
 
J'extrais les données a partir d'un programme PHP qui produit un fichier XML en UTF-8 : j'utilise en particulier  

Code :
  1. $xml .= utf8_encode("\r\t</languages>" );


 
Pourtant le fichier produit ne contient pas de caractère chinois :  le 中国 devient "??" !!!
 
qqu'un a-t-il une idée ?


Message édité par Blackdalhia le 18-03-2010 à 15:59:16
Reply

Marsh Posté le 14-07-2009 à 14:46:21   

Reply

Marsh Posté le 15-07-2009 à 17:43:25    

pas d'idée ?
y a t il un parametre a ajuster, soit dans la base de données, soit dans php quand je construis le fichier XML ?

Reply

Marsh Posté le 15-07-2009 à 21:02:53    

Pas besoin d'utf8_encode si la string est déjà en UTF-8

Reply

Marsh Posté le 16-07-2009 à 08:40:21    

ok
 
comment est ce que je je specifie que le fichier XML que je cree avec php est au format UTF-8 ?

Reply

Marsh Posté le 16-07-2009 à 09:27:29    

<?xml version="1.0" encoding="UTF-8"?> au début du fichier.
Et après quand tu écris dedans, soit tes écris des chaînes en utf8 sans conversion (celles qui viennent de ta base) soit tu convertis les chaînes que tu 'génères' en php qui par défaut n'est pas en utf-8 en utilisant utf8_encode.


---------------
By bob.
Reply

Marsh Posté le 16-07-2009 à 09:36:08    

j'ai mis ca dans mon php :
$xml= utf8_encode("<?xml version='1.0' encoding='UTF-8' ?>" );
mais ca ne fonctionne pas
 
y a t il une option a definir quand je cree mon fichier :
 $handle = fopen($filename, 'w');
 fwrite ($handle, utf8_encode($xml));

Reply

Marsh Posté le 18-07-2009 à 10:23:23    

marche toujours pas  :cry:  
j'ajoute mon code complet :

Code :
  1. /*****************/
  2. /* xml file init */
  3. /*****************/
  4. $xml= utf8_encode("<?xml version='1.0' encoding='UTF-8' ?>" );
  5. $xml .= utf8_encode("\r<library>" );
  6. $xml .= utf8_encode("\r<dataset name='location_languages'>" );
  7. $xml .= utf8_encode("\r\t<languages>" );
  8. /********************************/
  9. /* connection to MySQL database */
  10. /********************************/
  11. mysql_connect($host,$user,$pass) or die('Impossible to connect to server');
  12. mysql_select_db($bdd) or die('Connected to server but fail to connect to database');
  13. /******************************************************************/
  14. /* GENERAL LOOP ON Location Languages         */
  15. /******************************************************************/
  16. $req  = "SELECT  * FROM `Language_Location`
  17.       LEFT JOIN Languages ON Language_Location.Languages_Language=Languages.Language
  18.       WHERE   Activated='1' AND Locations_idLocation='".$idLocation."'
  19.       ORDER BY DefaultLanguage DESC";
  20. $result  = mysql_db_query($bdd,$req);
  21. while ($val = mysql_fetch_array($result))
  22. {
  23.  $idLanguage   = $val["Language"];
  24.  $LanguageName  = $val["LanguageName"];
  25.  $FlagPicture  = $val["FlagPicture"];
  26.  $xml .= utf8_encode("\r\t\t<language languagename='".htmlspecialchars($LanguageName, ENT_QUOTES)."' idLanguage='".$idLanguage."' FlagPicture='".$flag_directory.$FlagPicture."'/>" );
  27. }
  28. /******************************************************************/
  29. /* XML CLOSING                */
  30. /******************************************************************/
  31. $xml .= utf8_encode("\r\t</languages>" );
  32. $xml .= utf8_encode("\r</dataset>" );
  33. $xml .= utf8_encode("\r</library>" );
  34. print $xml;
  35. $handle = fopen($filename, 'w');
  36. fwrite ($handle, utf8_encode($xml));
  37. fclose($handle);

Reply

Marsh Posté le 18-07-2009 à 10:31:04    

Normal,
 
Tu converti $LanguageName via ut8_encode alors qu'il est déjà en ut8 (ligne 33)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-07-2009 à 10:42:39    

j'ai viré le utf8 encode en ligne 33 :
 

Code :
  1. $xml .= "\r\t\t<language languagename='".htmlspecialchars($LanguageName, ENT_QUOTES)."' idLanguage='".$idLanguage."' FlagPicture='".$flag_directory.$FlagPicture."'/>";


 
ca me donne toujours le meme resultat :
 

Code :
  1. <?xml version='1.0' encoding='UTF-8' ?>
  2. <library>
  3. <dataset name='location_languages'>
  4. <languages>
  5.  <language languagename='Français' idLanguage='FRA' FlagPicture='../resources/img_flags/Flag_FRA.gif'/>
  6.  <language languagename='English' idLanguage='ENG' FlagPicture='../resources/img_flags/Flag_ENG.gif'/>
  7.  <language languagename='Italiano' idLanguage='ITA' FlagPicture='../resources/img_flags/Flag_ITA.gif'/>
  8.  <language languagename='Deutsch' idLanguage='GER' FlagPicture='../resources/img_flags/Flag_GER.gif'/>
  9.  <language languagename='??' idLanguage='CHN' FlagPicture='../resources/img_flags/Flag_CHN.gif'/>
  10. </languages>
  11. </dataset>
  12. </library>


 
je me demande si ca ne vient pas de la maniere dont je cree le fichier ou bien quand je me connecte a la base

Reply

Marsh Posté le 18-07-2009 à 10:46:46    

Mais ta case de donnée elle est en UTF8 ? T'es sûr?
 
Edit :  
Au cas où .. ajoute un 'UTF-8' après le ENT_QUOTES


Message édité par esox_ch le 18-07-2009 à 10:48:03

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 18-07-2009 à 10:46:46   

Reply

Marsh Posté le 18-07-2009 à 11:19:37    

oui ma base est en utf8_unicde_ci
avec phpMyAdmin je vois clairement les caracteres chinois
J'ai ajouter l utf8 comme tu l'as suggere mais toujours rien ... bizarre : si phpMyAdmin le lis correctement ca veut dire que c'est clairement mon code php qui merdouille ...

Reply

Marsh Posté le 19-07-2009 à 17:41:40    

personne n'a d'autres idées ?
j'ai vu sur un autre forum qu'il faut s'assurer que tout est en UTF8 : depuis la connection jusqu'a l'ecriture du fichier, mais personne ne dit comment faire ... :(

Reply

Marsh Posté le 27-07-2009 à 11:17:10    

Bon j'ai trouvé :  
- il faut ajouter mysql_query("SET NAMES 'utf8'" ); juste apres la connection a la base de données pour préciser à MySQL la manière dont elle doit traiter les caractères contenus dans une requête SQL
- j'ai enlever les conversion en UTF8 vue que les données sont déjà en UTF8
 
Au passage un excellent tutoriel :
http://electron-libre.fassnet.net/utf8.php

Reply

Marsh Posté le 18-03-2010 à 10:05:09    

Hello

 

je deterre ce topic ... malheureusement le probleme a resurgit :(

 

J ai change de PC, j ai maintenant un PC Chinois (windows en anglais).

 

Je retrouve le meme probleme....
- ma base est en UTF8
- je mets mysql_query("SET NAMES 'utf8'" ); juste apres la connection
- j utilise quercus a la place de apache, il traite par defaut du UTF8
- dans ma base je mets : 中国, mon code ShortDescription='".htmlspecialchars($Description, ENT_QUOTES) donne un magnifique ??
j essaie un utf8_encode($Description) et un utf8_decode($Description) : meme chose : ??

 

une idee avant que j apprenne a mon PC a voler ?

 

Ha oui, ce qui est bizarre : quand je fais un mysql_client_encoding($link) j'obtiens un latin1 !!!!


Message édité par Blackdalhia le 18-03-2010 à 10:09:04
Reply

Marsh Posté le 18-03-2010 à 16:01:37    

c est vraiment bizarre que ca marchait sur mon autre PC : y a t il un parametre lie au PC qui pourrait influer sur le type de donnees ?
 
je me dis que lorsque je modifie les donnees (dans MySQL Admin), si ce aue je rentre au clavier est considere comme du latin1, bien que la base soit en UTF8 les donnees sont finalement en latin1 ... y a t il un moyen de verifier ca ?

Reply

Marsh Posté le 18-03-2010 à 17:30:37    

regardes le charset par défaut de mysql ou la collation par défaut ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 19-03-2010 à 06:12:37    

ben je viens de regarder a nouveau le my.ini de MySQL :
 
default-character-set=utf8
 
y a t il yune ligne de commande pour verifier ?  

Reply

Marsh Posté le 19-03-2010 à 09:37:25    

et la collation par défaut, c'est quel charset?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 20-03-2010 à 02:17:24    

je viens de rajouter general_ci mais ca change rien

Reply

Marsh Posté le 20-03-2010 à 03:02:39    

est ce qu il y a une ligne de commane mysql qui me permettrait de verfier le charset par defait et la colation par defaut ?

Reply

Marsh Posté le 20-03-2010 à 12:00:23    

moi, je les vois dans phpmyadmin. Pour la ligne de commande, ben regardes sur le site de mysql :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 11-05-2010 à 05:40:38    

j ai toujours ce satane probleme ...  
 
Mon script php me donne le resultat suivant alors que tout est en UTF-8 (Cf fichier de config ci apres  :cry: :

Citation :


record : 1 - test 1 charset = latin1
record : 2 - ?? charset = latin1
record : 3 - pr�c�dent fran�ais charset = latin1


 
Mon script php :

Code :
  1. <?php
  2. $link = mysql_connect($host,$user,$pass) or die('Impossible to connect to server');
  3. mysql_select_db($bdd) or die('Connected to server but fail to connect to database');
  4. mysql_query("SET NAMES 'utf8' COLLATE 'utf8_bin'", $link);
  5. $reqMain = "SELECT id, comment FROM test";
  6. $reqResultMain = mysql_db_query($bdd,$reqMain);
  7. while ($valMain = mysql_fetch_array($reqResultMain)) {
  8.  $id   = $valMain["id"];
  9.  $comment = $valMain["comment"];
  10.  echo " record  : $id - $comment ";
  11.  $req = "SELECT CHARSET('".$comment."') AS ch";
  12.  $reqResult = mysql_db_query($bdd,$req);
  13.  while ($val = mysql_fetch_array($reqResult)) {
  14.   echo " charset = ".$val["ch"];
  15.  }
  16.  echo "<br />";
  17. }
  18. ?>


 
Mes fichiers de config des differents elements :
Glassfish / sun-web.xml:
<locale-charset-info>
 <parameter-encoding default-charset="UTF-8" />
 </locale-charset-info>
 
 
Quercus / web.xml:  
 <init-param>
       <param-name>script-encoding</param-name>
       <param-value>UTF-8</param-value>
</init-param>
 
 
MySQL / my.ini:
default-character-set=utf8
default-collation=utf8_general_ci
 
La Table test a pour  charset UTF8 et Collation utf8_general_ci


Message édité par Blackdalhia le 11-05-2010 à 05:41:19
Reply

Marsh Posté le 12-05-2010 à 06:56:23    

pas d idee ? apparemment sur certains forum de QUercus, ils parlent de definir de maniere explicite l'utilisation de l'encodage UTF-8 pour javac, mais je ne sais pas comment faire ca ...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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