Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
827 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  DOMXML et encodage des caracteres

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DOMXML et encodage des caracteres

n°1118022
freed102
Arayashiki
Posté le 13-06-2005 à 11:19:57  profilanswer
 

vu que htmlentities() m'est completement inutile pour du XML... je voudrais savoir si il existe une fonction DOMXML pour encoder les caracteres au format XML ?
 
la seule chose que j'ai trouvé pour l'instant c'est une fonction (qui peut etre fonctionne bien)
 

Code :
  1. function xmlentities($string, $quote_style=ENT_QUOTES)
  2. {
  3.    static $trans;
  4.    if (!isset($trans)) {
  5.        $trans = get_html_translation_table(HTML_ENTITIES, $quote_style);
  6.        foreach ($trans as $key => $value)
  7.            $trans[$key] = '&#'.ord($key).';';
  8.        // dont translate the '&' in case it is part of &xxx;
  9.        $trans[chr(38)] = '&';
  10.    }
  11.    // after the initial translation, _do_ map standalone '&' into '&'
  12.    return preg_replace("/&(?![A-Za-z]{0,4}\w{2,3};|#[x0-9a-f]{2,6};)/","&", strtr($string, $trans));
  13. }


 
... une autre suggestion ?

mood
Publicité
Posté le 13-06-2005 à 11:19:57  profilanswer
 

n°1118029
FlorentG
Posté le 13-06-2005 à 11:23:47  profilanswer
 

Mais ne te fais absolument pas chier avec ça, tout est fait tout seul :

$pouet->set_content('éàéàéàéà');


Ensuite :

echo $dom->dump_mem(true, 'iso-8859-1');


Avec ça, tous les accents seront de la forme & #xxxxx;

echo $dom->dump_mem(true, 'utf-8');


Avec ça, ils seront tels quels, gràce à l'unicode :)


Message édité par FlorentG le 13-06-2005 à 11:24:02
n°1118039
freed102
Arayashiki
Posté le 13-06-2005 à 11:27:14  profilanswer
 

arf ! mais apparement je peux pas mettre cette option avec dump_file :(
faut faire un fread, fwrite etc etc ? (c galere ! lol !)

n°1118042
FlorentG
Posté le 13-06-2005 à 11:28:46  profilanswer
 

bah fait un dump_mem, que tu stocke dans une string, puis écrit dans un fichier via fopen et fwrite [:spamafote]

n°1118111
freed102
Arayashiki
Posté le 13-06-2005 à 11:54:23  profilanswer
 

FlorentG a écrit :

bah fait un dump_mem, que tu stocke dans une string, puis écrit dans un fichier via fopen et fwrite [:spamafote]


 
si je fais ça :
 

Code :
  1. $xml=$dom->dump_mem(true, 'iso-8859-1');
  2. $handle=fopen($_SESSION['xml_path_file'],'r+');
  3. fwrite($handle,$xml);
  4. fclose($handle);


 
il me retourne ça :

Citation :

Warning: dump_mem(): output conversion failed due to conv error in /u/clonecop/public_html/php/ezdocs/valid.php on line 632
 
Warning: dump_mem(): Bytes: 0xE9 0x3C 0x2F 0x6E in /u/clonecop/public_html/php/ezdocs/valid.php on line 632
 
Warning: dump_mem(): encoder error in /u/clonecop/public_html/php/ezdocs/valid.php on line 632
 
Warning: Cannot modify header information - headers already sent by (output started at /u/clonecop/public_html/php/ezdocs/valid.php:632) in /u/clonecop/public_html/php/ezdocs/valid.php on line 639


 
si je fais ça :
 

Code :
  1. $xml=$dom->dump_mem(true, 'utf-8');
  2. $handle=fopen($_SESSION['xml_path_file'],'r+');
  3. fwrite($handle,$xml);
  4. fclose($handle);


mon fichier XML me retourne ça :

Citation :

La page XML ne peut pas être affichée  
Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL. Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.  
 
 
--------------------------------------------------------------------------------
 
Un caractère incorrect a été trouvé dans un contenu de texte. Erreur de traitement de la ressource http://www.clonecopy.net...
 
    <nom>Dupr
 


 
et DOMXML (domxml_open_file) me retourne ça :

Citation :

Warning: domxml_open_file(): Input is not proper UTF-8, indicate encoding ! Bytes: 0xE9 0x3C 0x2F 0x6E in /u/clonecop/public_html/php/ezdocs/model_pose.php on line 18
 
Warning: domxml_open_file(): Extra content at the end of the document in /u/clonecop/public_html/php/ezdocs/model_pose.php on line 18


 
 :cry:

n°1118117
FlorentG
Posté le 13-06-2005 à 11:56:32  profilanswer
 

Y'a un caractère bizarre dedans [:spamafote] Doit y avoir un truc lors de la création ou je sais pas...

n°1118126
freed102
Arayashiki
Posté le 13-06-2005 à 11:59:42  profilanswer
 

bah c'est juste un accent aigu "é"

n°1118128
FlorentG
Posté le 13-06-2005 à 12:01:17  profilanswer
 

Ton $xml, il est fait comment ?

n°1118139
freed102
Arayashiki
Posté le 13-06-2005 à 12:05:37  profilanswer
 

il me retourne un truc chelou (ce qui ne se produisait pas avec dump_file)
 

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <document pagewidth="50" pageheight="90" orientation="portrait">
  3.   <background pos_x="0" pos_y="0" width="10" height="80" couleur="CC00FF" angle=""/>
  4.   <entite type="textentity" pos_x="12" pos_y="7" width="60" height="50" fonte="avgardn.afm" couleur="CC99FF" size="18" align="" valign="middle" interlignage="">
  5.     <nom>Dupre</nom>
  6.     <prenom>Jacques</prenom>
  7.   </entite>
  8.   <titre type="textelement" pos_x="12" pos_y="15" width="80" height="12" fonte="avgardm.afm" couleur="3399FF" size="12" align="" valign="middle" interlignage="">Plombier</titre>
  9.   <coordonnees type="textentity" pos_x="12" pos_y="65" width="65" height="50" fonte="avgardni.afm" couleur="666666" size="8" align="" valign="middle" interlignage="">
  10.     <adresse>33, rue des beaux tuyaux</adresse>
  11.     <cp>78400</cp>
  12.     <ville>Plombcity</ville>
  13.     <telephone>0123456790</telephone>
  14.     <fax>0123456710</fax>
  15.     <mobile></mobile>
  16.     <email>xxx@xxx.com</email>
  17.     <url>http://www.clonecopy.net</url>
  18.   </coordonnees>
  19.   <logo1 type="picture" pos_x="55" pos_y="20" width="20" height="" path="clients/DUPJA97bca87/images/">dupjac_1118653504.jpg</logo1>
  20. </document>
  21. logo1>
  22. </document>

n°1118141
FlorentG
Posté le 13-06-2005 à 12:06:14  profilanswer
 

J'veux dire quand toi tu le remplis, tu le fais comment ?

mood
Publicité
Posté le 13-06-2005 à 12:06:14  profilanswer
 

n°1118142
freed102
Arayashiki
Posté le 13-06-2005 à 12:06:19  profilanswer
 

deja il me supprime mes accents (apparement)
et il me rajoute une balise </document> à la fin je sais pas pourquoi

n°1118146
freed102
Arayashiki
Posté le 13-06-2005 à 12:07:30  profilanswer
 

et bien j'ai créé une serie de fonctions du genre :
 

Code :
  1. function CreateDOMTextElement($DOMdocument,$parentNodeName,$newNodename,$pos_x=10,$pos_y=10,$width=75,$height=45,$fonte="arial.ttf",$couleur="FFFFFF",$size="10",$align="center",$valign="middle",$interlignage="auto",$angle=0,$interlettrage="auto",$text)
  2. {
  3. $parentNode=& $DOMdocument->get_elements_by_tagname($parentNodeName);
  4. $newNode=& $DOMdocument->create_element($newNodename);
  5. $newNode->set_attribute("type","textelement" );
  6. $newNode->set_attribute("pos_x",$pos_x);
  7. $newNode->set_attribute("pos_y",$pos_y);
  8. $newNode->set_attribute("width",$width);
  9. $newNode->set_attribute("height",$height);
  10. $newNode->set_attribute("fonte",$fonte);
  11. $newNode->set_attribute("couleur",$couleur);
  12. $newNode->set_attribute("size",$size);
  13. $newNode->set_attribute("align",$align);
  14. $newNode->set_attribute("valign",$valign);
  15. $newNode->set_attribute("interlignage",$interlignage);
  16. $newNode->set_content($text);
  17. $parentNode[0]->append_child($newNode);

n°1118149
FlorentG
Posté le 13-06-2005 à 12:08:19  profilanswer
 

Ok, ça doit être à ce moment que ça foire : t'as un doc en utf-8, et tu lui file des chaînes en iso. Donc essaye :

$newNode->set_content(utf8_encode($text));

n°1118166
freed102
Arayashiki
Posté le 13-06-2005 à 12:14:37  profilanswer
 

visiblement c mieux pour l'encodage (merci)
 
mais par contre au niveau du dump c'est n'importe quoi !

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <document pagewidth="50" pageheight="90" orientation="portrait">
  3.   <background pos_x="0" pos_y="0" width="10" height="80" couleur="CC00FF" angle=""/>
  4.   <entite type="textentity" pos_x="12" pos_y="7" width="60" height="50" fonte="avgardn.afm" couleur="CC99FF" size="18" align="" valign="middle" interlignage="">
  5.     <nom>Dupré</nom>
  6.     <prenom>Jacques</prenom>
  7.   </entite>
  8.   <titre type="textelement" pos_x="12" pos_y="15" width="80" height="12" fonte="avgardm.afm" couleur="3399FF" size="12" align="" valign="middle" interlignage="">Plombier</titre>
  9.   <coordonnees type="textentity" pos_x="12" pos_y="65" width="65" height="50" fonte="avgardni.afm" couleur="666666" size="8" align="" valign="middle" interlignage="">
  10.     <adresse>33, rue des beaux tuyaux</adresse>
  11.     <cp>78400</cp>
  12.     <ville>Plombcity</ville>
  13.     <telephone>0123456790</telephone>
  14.     <fax>0123456710</fax>
  15.     <mobile></mobile>
  16.     <email>xxx@xxx.com</email>
  17.     <url>http://www.clonecopy.net</url>
  18.   </coordonnees>
  19.   <logo1 type="picture" pos_x="55" pos_y="20" width="20" height="" path="clients/DUPJA97bca87/images/">dupjac_1118653504.jpg</logo1>
  20. </document>
  21. ogo1>
  22. </document>

n°1118169
FlorentG
Posté le 13-06-2005 à 12:15:37  profilanswer
 

Là y'a un stress ailleurs :/

n°1118174
freed102
Arayashiki
Posté le 13-06-2005 à 12:16:36  profilanswer
 

bah oui parceque avec dump_file j'ai pas ce probleme là :/

n°1118180
FlorentG
Posté le 13-06-2005 à 12:17:59  profilanswer
 

C'est au niveau du fwrite, il doit pas avoir la bonne taille :(

n°1118185
freed102
Arayashiki
Posté le 13-06-2005 à 12:18:41  profilanswer
 

bah j'ai pas spécifié de taille en fait.. peut etre qu'il faut le faire

n°1118187
FlorentG
Posté le 13-06-2005 à 12:19:36  profilanswer
 

Ouaip... Genre strlen($xml) pour la taille complète

n°1118197
freed102
Arayashiki
Posté le 13-06-2005 à 12:31:07  profilanswer
 

bon c t pas ça... cependant j'ai changé un truc au niveau du fopen
 

Code :
  1. if(file_exists($_SESSION['xml_path_file']))
  2. {
  3. unlink($_SESSION['xml_path_file']);
  4. }
  5. $handle=fopen($_SESSION['xml_path_file'],'x+');
  6. fwrite($handle,$xmlcontent,strlen($xmlcontent));
  7. fclose($handle);


maintenant j'ai un nouveau probleme... c'est avec domxml_open_file() qui me traduit un accent aigu comme ça :
 
Dupré Jacques  
 
:cry:

n°1118198
FlorentG
Posté le 13-06-2005 à 12:32:16  profilanswer
 

Là c'est parce que le contenu du fichier est en unicode, et que tu l'affiche en iso-8859-1

n°1118199
freed102
Arayashiki
Posté le 13-06-2005 à 12:32:25  profilanswer
 

utf8_decode ? (ça existe ?)

n°1118203
FlorentG
Posté le 13-06-2005 à 12:32:55  profilanswer
 

Ouaip :)

n°1118207
freed102
Arayashiki
Posté le 13-06-2005 à 12:34:35  profilanswer
 

pfew ! c tordu quand même tout ça! lol

n°1118209
freed102
Arayashiki
Posté le 13-06-2005 à 12:36:28  profilanswer
 

youpi !! ça marchouille !!! :d :d :d
:jap:  
merci bcp !

n°1118221
freed102
Arayashiki
Posté le 13-06-2005 à 12:43:18  profilanswer
 

dernier truc.. j'ai l'impression qu'il me rajoute un \n ou un truc comme ça au decodage... c'est possible ?

n°1118224
FlorentG
Posté le 13-06-2005 à 12:44:18  profilanswer
 

Je sais pas trop

n°1118248
freed102
Arayashiki
Posté le 13-06-2005 à 13:06:33  profilanswer
 

j'ai trouvé !
visiblement tout vient de l'ouverture du fichier... fallait ajouter une option
 
$dom = domxml_open_file($_SESSION['xml_path_file'],DOMXML_LOAD_DONT_KEEP_BLANKS)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  DOMXML et encodage des caracteres

 

Sujets relatifs
trier un tableau à 2 dimensions de caracteres[vb.net] Interprétation d'une chaîne de caractères
[C]Nb de caracteres dans le buffer liaison série??Les caractères accentués s'enregistrent mal dans ma base MySQL
caractères bizarres dans mon EditBox[Flash/XML] Problème de caractères html à l'importation --> corréen ?
MySQL, ColdFusion et caractères spéciauxcaractères spéciaux et mysql
lecture d'un fichier par block de caracteresSupport de caractères ( ' par ex)dans une info-bulle [RESOLU]
Plus de sujets relatifs à : DOMXML et encodage des caracteres


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR