DOMXML et encodage des caracteres

DOMXML et encodage des caracteres - PHP - Programmation

Marsh Posté le 13-06-2005 à 11:19:57    

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 ?

Reply

Marsh Posté le 13-06-2005 à 11:19:57   

Reply

Marsh Posté le 13-06-2005 à 11:23:47    

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
Reply

Marsh Posté le 13-06-2005 à 11:27:14    

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

Reply

Marsh Posté le 13-06-2005 à 11:28:46    

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

Reply

Marsh Posté le 13-06-2005 à 11:54:23    

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:

Reply

Marsh Posté le 13-06-2005 à 11:56:32    

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

Reply

Marsh Posté le 13-06-2005 à 11:59:42    

bah c'est juste un accent aigu "é"

Reply

Marsh Posté le 13-06-2005 à 12:01:17    

Ton $xml, il est fait comment ?

Reply

Marsh Posté le 13-06-2005 à 12:05:37    

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>

Reply

Marsh Posté le 13-06-2005 à 12:06:14    

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

Reply

Marsh Posté le 13-06-2005 à 12:06:14   

Reply

Marsh Posté le 13-06-2005 à 12:06:19    

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

Reply

Marsh Posté le 13-06-2005 à 12:07:30    

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);

Reply

Marsh Posté le 13-06-2005 à 12:08:19    

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));

Reply

Marsh Posté le 13-06-2005 à 12:14:37    

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>

Reply

Marsh Posté le 13-06-2005 à 12:15:37    

Là y'a un stress ailleurs :/

Reply

Marsh Posté le 13-06-2005 à 12:16:36    

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

Reply

Marsh Posté le 13-06-2005 à 12:17:59    

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

Reply

Marsh Posté le 13-06-2005 à 12:18:41    

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

Reply

Marsh Posté le 13-06-2005 à 12:19:36    

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

Reply

Marsh Posté le 13-06-2005 à 12:31:07    

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:

Reply

Marsh Posté le 13-06-2005 à 12:32:16    

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

Reply

Marsh Posté le 13-06-2005 à 12:32:25    

utf8_decode ? (ça existe ?)

Reply

Marsh Posté le 13-06-2005 à 12:32:55    

Ouaip :)

Reply

Marsh Posté le 13-06-2005 à 12:34:35    

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

Reply

Marsh Posté le 13-06-2005 à 12:36:28    

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

Reply

Marsh Posté le 13-06-2005 à 12:43:18    

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

Reply

Marsh Posté le 13-06-2005 à 12:44:18    

Je sais pas trop

Reply

Marsh Posté le 13-06-2005 à 13:06:33    

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)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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