Question

Je développe maintenant des sites Web et des interfaces XML depuis 7 ans, et je ne suis jamais venu dans une situation, où il était vraiment nécessaire d'utiliser le &gt; pour un >. Toute la désambigution pourrait jusqu'à présent être gérée en citant <, &, " et ' seul.

Quelqu'un a-t-il déjà été dans une situation (liée à, par exemple, le traitement SGML, les problèmes de navigateur, XSLT, ...) où vous avez trouvé indeppensable d'échapper au signe plus grand que avec &gt;?

Mise à jour: Je viens de vérifier avec le Spec xml, où il dit, par exemple, sur les données des caractères dans la section 2.4:

Données de caractère

[14]      CharData       ::=      [^<&]* - ([^<&]* ']]>' [^<&]*)

Donc même là, le > n'est pas mentionné comme quelque chose de spécial, sauf à partir de la séquence de fin d'une section CDATA.

Ce seul cas, où le > est d'une importance, ce serait la fin d'une section CDATA, ]]>, mais là encore, si vous le citez, la citation (c'est-à-dire la chaîne littérale ]]&gt;) allait atterrir littéralement dans la production (car il est Cdata).

Était-ce utile?

La solution

Vous n'avez pas besoin de absolument parce que presque tous les interprètes XML comprendront ce que vous voulez dire. Mais vous utilisez toujours un caractère spécial sans aucune protection si vous le faites.

XML est une question de sémantique, et ce n'est pas vraiment conforme au sémantique.

Au sujet de votre mettre à jour, vous avez oublié cette partie:

Le support d'angle droit (>) peut être représenté à l'aide de la chaîne ">", et doit, pour compatibilité, être échappé à l'aide " &gt; "ou une référence de caractère quand il apparaît dans la chaîne" ]]> "Dans le contenu, lorsque cette chaîne ne marque pas la fin d'une section CDATA.

Le cas d'utilisation donné dans la documentation concerne plus quelque chose comme ceci:

<xmlmarkup>
]]>
</xmlmarkup>

Ici le ]]> La partie pourrait être un problème avec les anciens analyseurs SGML, donc c'est devoir être échappé dans = ]]&gt; Pour des raisons de compatibilités.

Autres conseils

j'ai utilisé une pas 19 heures il y a pour passer un validateur XML strict. Un autre cas est que lorsque vous les utilisez réellement dans le texte du contenu HTML / XML (plutôt que des attributs), comme ceci: <.

Bien sûr, un analyseur laxiste acceptera presque tout ce que vous lancez, mais si vous vous inquiétez pour XSS, <est votre ami.

Mise à jour: voici un exemple où vous devez vous échapper > Dans Firefox:

<?xml version="1.0" encoding="utf-8" ?>
<test>
    ]]>
</test>

Certes, ce n'est toujours pas un exemple de devoir échapper à un seul >.

Pas tant qu'un auteur de (x) documents HTML, mais plus en tant qu'utilisateur de champs de commentaires écrits bâclés sur les sites Web, qui vous offrent pour insérer HTML.

Je veux dire que si vous faites votre site de la bonne façon, vous ne composeriez pas votre contenu de toute façon, non? Alors votre appel à htmlentities Ou peu importe (longtemps sans voir, PHP) prendrait soin de remplacer des caractères spéciaux pour vous. Si bien sûr, vous ne taperiez pas manuellement &gt; Mais j'espère que vous prenez des mesures ainsi > est automatiquement remplacé.

J'ai juste pensé à un autre exemple, où vous devez citer > Dans HTML5 (pas xhtml5) Documents: Si vous en avez besoin dans des attributs sans citations (ce qui est quelque chose, cela peut être argumenté bien sûr).

<img src=arrow.png alt=&gt;>

devrait être équivalent à xhtml

<img src="arrow.png" alt=">" />

Mais encore une fois, (?

Imaginez que vous avez le texte suivant this is a not a ]]> nice day Et vous décidez de l'entourer par des sections CDATA <![CDATA[this is a not a ]]> nice day]]>.

Afin d'éviter que (et pour permettre l'analyse des fragments de SGML avec des sections marquées non terminées), la clause 10.4 de l'ISO 8879: 1986 déclare que l'occurrence de ]]> En dehors d'une section marquée est une erreur.

De plus, dans l'époque des sections marquées SGML était très populaire, car ils étaient non seulement utilisés pour les CDATA (comme dans XML), mais aussi pour la rCDATA (seules les entités et les références de caractère autorisées) et ignorer et inclure (qui permettait la reconnaissance du balisage à l'intérieur).

Par exemple, dans SGML, on pourrait écrire:

 <!ENTITY %WHATTODO "INCLUDE">
 <![%WHATTODO;[<b>]]&gt;</b>]]>

Ce qui équivaut à:

 <b>]]&gt;</b>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top