11548 sujets

JavaScript, DOM et API Web HTML5

Salut, je suis en train de faire une petite application en AJAX. Une liste avec des filtres sous forme de case à cocher.

Tout fonctionne très bien hormis qu'il existe encore un petit problème au niveau des caractères spéciaux. Je travaille qu'avec des caractères sous la forme d'entités HTML et encodage UTF-8 (base de données MySQL et fichier XML compris).

Le problème c'est lorsque je parcours mon XML avec JavaScript et que je récupère les données pour les afficher dans un tableau que je crée à la volée, les entités HTML apparaissent telle quelles au lieu d'afficher les caractères coresspondants.

Voilà à quoi ressemble mon XML :

<users>
     <user id="1">
          <name><![CDATA["GUILLARD"]]></name>
          <firstname><![CDATA["Aur&eacute;lien"]]></firstname>
          <phone>xxxxxxxxxx</phone>
          <mobile>xxxxxxxxxx</mobile>
          <mail>xxxxxxxxxx@gmail.com</mail>
     </user>
</users>


Je récupère les données de cette manière en JS

var text = removeQuotes(getText(items.item(i).childNodes[1]) + " " + getText(items.item(i).childNodes[0]));

removeQuotes() est une fonction perso pour enlever les apastrophes générées par les CDATA et getText() est une fonction perso pour utiliser .text ou .textContent suivant les navigateurs webs.

Et donc, à l'affichage , j'ai :

Aur&eacute;lien GUILLARD	xxxxxxxxxx@gmail.com	xxxxxxxxxx	xxxxxxxxxx

Au lieu d'avoir :

Aurélien GUILLARD	xxxxxxxxxx@gmail.com	xxxxxxxxxx	xxxxxxxxxx


Quelqu'un a une idée de pourquoi les entités HTML ne sont pas interprétées ?

Merci beaucoup Smiley cligne
Modifié par RorolePro (14 Jun 2008 - 14:54)
Hello,

Je pense qu'il faut que tu révises un peu le XML. Smiley smile

&eacute; et autres entités équivalentes sont valables en HTML mais pas dans un fichier XML quelconque. De plus, elles sont inutiles si ton document est correctement encodé en UTF-8.

De plus, les entités à l'intérieur d'une section CDATA ne sont pas prises en compte (elles sont interprétées comme du texte). D'ailleurs, il est inutile d'ajouter des guillemets, et dans ton exemple je ne vois même pas à quoi servent ces sections. Smiley smile
En effet, on m'a dit qu'il ne fallait pas utiliser de CDATA. Que c'était inutile dans mon cas.

Cependant, si je les enlève, mon XML n'est pas valide, Firefox me donne l'erreur :

Erreur d'analyse XML : entité non définie

Internet Explorer me donne l'erreur

Erreur de traitement de la ressource 

et Opera me renvoie l'erreur

well-formedness constraint: entity declared

Bref, mon XML semble incorrect si il contient des entités HTML.

Le problème, ce que je suis obligé de faire avec ces entités HTML, je vais chercher mes données dans une base de données MySQL où les données sont enregistrées de cette manière.

La question revient donc à déterminer comment on peut enregistrer des entités HTML dans un XML...
Si je fais ta solution koala64, c'est lorsque j'affiche ensuite ces caractères sur ma page web, ils ne s'affichent, ils sont pas interprétés à la place j'ai un "?".

Mais j'ai trouvé la solution à mon problème Smiley lol

En fait, faut réécrire une DTD perso en spécifiant des entités pour que les entités HTML soient interprétées.

Mon XML ressemble donc à ça avec le DTD inclu dedans :

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE users [
<!ENTITY Agrave "À">
<!ENTITY Aacute "Á">
<!ENTITY Acirc "Â">
<!ENTITY AElig "Æ">
<!ENTITY Ccedil "Ç">
<!ENTITY Egrave "È">
<!ENTITY Eacute "É">
<!ENTITY Ecirc "Ê">
<!ENTITY Igrave "Ì">
<!ENTITY Iacute "Í">
<!ENTITY Icirc "Î">
<!ENTITY Ograve "Ò">
<!ENTITY Oacute "Ó">
<!ENTITY Ocirc "Ô">
<!ENTITY Ugrave "Ù">
<!ENTITY Uacute "Ú">
<!ENTITY Ucirc "Û">
<!ENTITY agrave "à">
<!ENTITY aacute "á">
<!ENTITY acirc "â">
<!ENTITY aelig "æ">
<!ENTITY ccedil "ç">
<!ENTITY egrave "è">
<!ENTITY eacute "é">
<!ENTITY ecirc "ê">
<!ENTITY igrave "ì">
<!ENTITY iacute "í">
<!ENTITY icirc "î">
<!ENTITY ograve "ò">
<!ENTITY oacute "ó">
<!ENTITY ocirc "ô">
<!ENTITY ugrave "ù">
<!ENTITY uacute "ú">
<!ENTITY ucirc "û">
<!ELEMENT users (user*)>
<!ELEMENT user (name?, firstname?, phone?, mobile?, mail?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT mobile (#PCDATA)> 
<!ELEMENT mail (#PCDATA)> 
<!ATTLIST user id CDATA #REQUIRED>
]>
<users>
<user id="1">
<name>GUILLARD</name>
<firstname>Aur&eacute;lien</firstname>
<phone>xxxxxxxxxx</phone>
<mobile>xxxxxxxxxx</mobile>
<mail>xxxxxxxxxx@gmail.com</mail>
</user>
</users>


Sources d'info :
le w3c : http://www.w3.org/TR/REC-xml/#wf-entdeclared
l'altruiste : http://www.laltruiste.com/coursxml/entitesinternes_parametres.html
Modifié par RorolePro (14 Jun 2008 - 14:50)
RorolePro>Si tu as des ? au lieu des caractères accentués/spéciaux, c'est que la page n'est pas encodé en UTF-8.
Si tu es sous PHP, il faut bien vérifier a utiliser la fonction utf8_encode pour générer tous les texte susceptible de contenir des caractères accentués/spéciaux, préciser dans le header de l'envoies qu'il s'agit d'une application XML encodé en UTF8 via la fonction header et, bien sur, que le logiciel que tu utilises pour développer tes pages créé bien un fichier encodé en UTF-8 et non en ISO.
Modifié par MacIntoc (15 Jun 2008 - 14:41)