193 votes

Qu'est-ce que le CDATA en HTML ?

Quelle est l'utilité de CDATA dans les balises JavaScript et HTML ?

<script type="text/javascript"> 
// <![CDATA[

// ]]>
</script>

141voto

Ahsan Rathod Points 3229

Tout le texte d'un document XML sera analysé par l'analyseur syntaxique.

Mais le texte à l'intérieur d'une section CDATA sera ignoré par l'analyseur syntaxique.

CDATA - Données de caractères (non analysées)

Le terme CDATA est utilisé pour les données textuelles qui ne doivent pas être analysées par l'analyseur XML.

Les caractères comme "<" et "&" sont illégaux dans les éléments XML.

"<" générera une erreur car l'analyseur syntaxique l'interprète comme le début d'un nouvel élément.

"&" générera une erreur car l'analyseur syntaxique l'interprète comme le début d'une entité de caractère.

Certains textes, comme le code JavaScript, contiennent beaucoup de caractères "<" ou "&". Pour éviter les erreurs, le code script peut être défini comme CDATA.

Tout ce qui se trouve à l'intérieur d'une section CDATA est ignoré par l'analyseur syntaxique.

Une section CDATA commence par " <![CDATA[ "et se termine par " ]]> "

Utilisation de CDATA dans la sortie du programme

Les sections CDATA dans les documents XHTML sont susceptibles d'être analysées différemment par les navigateurs web s'ils rendent le document en HTML, puisque les analyseurs HTML ne reconnaissent pas les marqueurs de début et de fin des CDATA, ni les références d'entités HTML telles que &lt; sur <script> balises. Cela peut causer des problèmes de rendu dans les navigateurs web et peut conduire à des vulnérabilités de scripts intersites s'ils sont utilisés pour afficher des données provenant de sources non fiables, puisque les deux types d'analyseurs ne seront pas d'accord sur l'endroit où la section CDATA se termine.

Un bref tutoriel sur le SGML .

Voir aussi le Entrée Wikipedia sur CDATA .

7 votes

Je pense que j'ai une meilleure question alors. Dans les grandes lignes, quels sont les avantages liés à l'utilisation de la balise CDATA ?

0 votes

@ajameswolf vous pouvez vérifier ceci stackoverflow.com/questions/66837/

100voto

Delan Azabani Points 33013

CDATA n'a aucune signification en HTML.

CDATA est une construction XML qui définit le contenu d'une balise qui est normalement #PCDATA - des données de caractères analysées, pour être plutôt considéré comme #CDATA, c'est-à-dire des données de caractères non analysées. Elle n'est pertinente et valide qu'en XHTML.

Il est utilisé dans script pour éviter l'analyse syntaxique < y & . En HTML, ce n'est pas nécessaire, car en HTML, script est déjà #CDATA.

13 votes

Alors, pourquoi les gens l'utilisent-ils à l'intérieur des balises Javascript ? où cela a-t-il une signification et pour quoi faire, merci.

1 votes

@SexyMF Probablement parce que ces personnes tapent des documents XHTML au lieu de SGML/HTML, et/ou qu'elles veulent aider les navigateurs moins conformes aux normes à charger correctement leurs pages.

1 votes

Même si elle date de presque 6 ans, c'est toujours la meilleure explication de CDATA J'ai vu.

20voto

Daniel De León Points 2842

CDATA est Obsolète .

Notez que les sections CDATA ne doivent pas être utilisées en HTML ; elles ne fonctionnent qu'en XML.

Il ne faut donc pas l'utiliser en HTML 5.

https://developer.mozilla.org/en-US/docs/Web/API/CDATASection#Specifications

Screenshot from MDN

2 votes

Je suis confus quant à ce qui change. 1) Les données de caractères existent toujours dans DOM4 ? w3.org/TR/dom/#interface-characterdata 2) Pourtant, la section CDATASection est supprimée ? w3.org/TR/dom/#dom-core Quelle sera l'alternative ? Encodage obligatoire ou tous < y & et placé dans une autre balise ? Qu'en est-il de la prise en charge des documents anciens ? Les navigateurs vont-ils soudainement abandonner le support des CDATA ? Nous ne pouvons donc pas traiter des documents créés par d'autres et sur lesquels nous n'avons aucun contrôle ? Ou alors, il faut se contenter de tripoter manuellement les chaînes de caractères ?

1 votes

Il suffit d'échapper aux caractères spéciaux.

1 votes

Pour la création de XML, je comprends, il suffit d'échapper les caractères. Cependant, je me demande comment traiter les sections CDATA (provenant par exemple de flux que nous ne pouvons pas contrôler et dont le format peut être lent à mettre à jour), une fois que les navigateurs auront supprimé la section CDATASection du DOM ? Quand le feront-ils ? FF 49 me montre toujours CDATASection dans le DOM. Je ne vois pas très bien comment gérer ce cas pendant la période de transition après qu'il ait été obsolète et supprimé du navigateur. Sera-t-il simplement considéré comme un nœud de texte ? Une erreur (mauvaise balise) ? J'essaie juste d'éviter la laideur de trouver manuellement des marqueurs dans le texte pour en extraire les données.

19voto

user823959 Points 435

Desde http://en.wikipedia.org/wiki/CDATA :

Puisqu'il est utile de pouvoir utiliser les signes inférieurs à (<) et les esperluettes (&) dans les scripts de pages Web et, dans une moindre mesure, dans les styles, sans avoir à se souvenir de les échapper, il est courant d'utiliser des marqueurs CDATA autour du texte des éléments en ligne et des éléments dans les documents XHTML. documents XHTML. Mais pour que le document puisse également être analysé par les analyseurs HTML qui ne reconnaissent pas les marqueurs CDATA, ces derniers sont généralement commentés, comme ici. sont généralement commentés, comme dans cet exemple JavaScript :

<script type="text/javascript">
//<![CDATA[
document.write("<");
//]]>
</script>

0 votes

Mec... J'avais l'habitude de voir ça tout le temps quand j'ai commencé à apprendre JavaScript... ça me ramène vraiment en arrière.

13voto

Ciro Santilli Points 3341

Un moyen d'écrire un sous-ensemble commun de HTML et XHTML

Dans l'espoir d'une plus grande portabilité.

En HTML, <script> est magique échappe à tout jusqu'à </script> apparaît.

Donc vous pouvez écrire :

<script>x = '<br/>';

y <br/> ne sera pas considéré comme une balise.

C'est pourquoi des chaînes telles que :

x = '</scripts>'

doit être échappé comme :

x = '</scri' + 'pts>'

Voir : Pourquoi diviser la balise <script> lorsqu'on l'écrit avec document.write() ?

Mais XML (et donc XHTML, qui est un "sous-ensemble" de XML, contrairement au HTML ), n'a pas cette magie : <br/> serait considéré comme une étiquette.

<![CDATA[ est la façon XHTML de dire :

n'analysent aucune balise avant la prochaine balise ]]> considère que tout cela est une chaîne

El // est ajouté pour que le CDATA fonctionne bien en HTML également.

En HTML <![CDATA[ n'est pas magique, il serait donc exécuté par JavaScript. Donc // est utilisé pour le commenter.

Le XHTML voit également le // mais l'observera comme une ligne de commentaire vide, ce qui n'est pas un problème :

//

Cela dit :

  • Les navigateurs compatibles doivent reconnaître si le document est du HTML ou du XHTML à partir du doctype initial. <!DOCTYPE html> vs <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • pourraient s'appuyer sur des navigateurs conformes, et coordonner le doctype avec un seul site Web valide. script syntaxe

Mais cela viole la règle d'or d'Internet :

ne faites pas confiance aux tiers, ou votre produit se brisera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X