2010-08-25 10 views
14

Ich entwickle jetzt Webseiten und XML-Schnittstellen seit 7 Jahren, und kam nie, in einer Situation, in der es wirklich notwendig war, die &gt; für eine > zu verwenden. Bislang konnten alle Disambigutionen allein mit <, &, " und ' behandelt werden.Wird > jemals benötigt?

Hat jemand jemals in einer Situation (in Zusammenhang mit, zum Beispiel, SGML-Verarbeitung, Browser-Probleme, XSLT, ...), wo Sie es unentbehrlich, das Größer-als-Zeichen mit &gt; zu entkommen gefunden?

Update: ich nur mit den XML spec geprüft, wo es heißt, zum Beispiel etwa Zeichendaten in Abschnitt 2.4:

Zeichendaten

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

Also auch dort, Die > wird nicht als etwas Besonderes erwähnt, außer von der Endsequenz eines CDATA-Abschnitts.

Dieser einen einzigen Fall, in dem die > von Bedeutung ist, wäre das Ende eines CDATA-Abschnitt sein, ]]>, aber dann wieder, wenn Sie es zitieren würde, das Zitat (dh die Zeichenkette ]]&gt;) würde Land buchstäblich in der Ausgabe (da es CDATA ist).

+4

Vielleicht hilft verstehe ich nicht, aber es Injektion von html/js zu verhindern. Es ist auch erforderlich, wenn Ihr Ergebnis HTML xhtml complient sein soll. – Nate

+4

Ich denke, es ist mehr für Symmetrie mit "<" als alles andere. –

+1

Du brauchst das nie, weil Browser nicht wie Compiler sind, sie sind viel zu permissiv/verzeihend, daher die Ignoranz der Standards im Web. Entweichst du nicht "" in einer JavaScript-Zeichenfolge? ('var test = 'Ich sage';') Das ist das Gleiche. –

Antwort

7

Sie müssen nicht unbedingt, weil fast jeder XML-Interpreter versteht, was Sie meinen. Aber du benutzt immer noch einen Sondercharakter ohne Schutz, wenn du das tust.

XML dreht sich alles um semantische, und das ist nicht wirklich semantisch kompatibel.

Über Ihre Update, vergessen Sie diesen Teil:

Der rechte Winkel Klammer (>) kann die Zeichenfolge „>“ dargestellt werden, verwenden und müssen, um die Kompatibilität, werden entkam entweder "&gt; "oder eine Zeichenreferenz, wenn sie in der Zeichenfolge" ]]> "im Inhalt erscheint, wenn diese Zeichenfolge nicht das Ende eines CDATA-Abschnitts markiert.

Der Anwendungsfall in der Dokumentation zu entnehmen ist, mehr über so etwas wie diese:

<xmlmarkup> 
]]> 
</xmlmarkup> 

Hier ist der ]]> Teil ein Problem mit altem SGML-Parser sein könnte, so dass es muss in = ]]&gt; entwertet wird aus Kompatibilitätsgründen.

+1

Was ist mit dem * fast * Teil? Gibt es welche, die von einem unquoted '>' einen hickup bekommen? – Boldewyn

+1

Nun, wenn jemand einen XML-Parser geschrieben hat, der nur die XML-Standards respektiert, könnte es passieren. Ich kenne keinen Parser, der dieses Verhalten haben könnte, aber es wäre weder seine Schuld noch ein Problem. –

+0

Ein XML-Parser, der die XML-Standards respektiert, MUSS ">" akzeptieren. Ich denke, der von Ihnen zitierte Absatz bezieht sich auf die Kompatibilität mit nicht-konformen Parsern oder vielleicht mit einer älteren (Entwurfs-) Version der Spezifikation. – Daniel

3

Nicht so sehr ein Autor von (x) HTML-Dokumenten, aber mehr als ein Benutzer von schlampig geschriebenen Kommentarfeldern in Websites, die "bieten" Sie HTML einfügen.

Ich meine, wenn Sie Ihre Website richtig machen, würden Sie Ihre Inhalte sowieso nicht fest codieren, oder? So würde Ihr Anruf an htmlentities oder was auch immer (lange Zeit nicht sehen, PHP) würde sich kümmern, Sonderzeichen für Sie zu ersetzen. So sicher, würden Sie nicht manuell &gt; eingeben, aber ich hoffe, dass Sie Maßnahmen ergreifen, damit > automatisch ersetzt wird.

3

Ich habe one not 19 hours verwendet, um einen strengen XML-Validator zu übergeben. Ein anderer Fall ist, wenn Sie sie tatsächlich in html/xml Inhalt Text (anstatt Attribute), wie folgt verwenden: <.

Sicher, ein laxer Parser wird fast alles akzeptieren, was Sie werfen, aber wenn Sie sich jemals Sorgen über XSS machen, & lt; ist dein Freund.

Update: Hier ist ein Beispiel, wo Sie brauchen > in Firefox zu entkommen:

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

Zugegeben, es ist noch kein Beispiel für ein einsames > zu entkommen ist.

+0

Hätte Ihr referenziertes Beispiel auch funktioniert, wenn Sie nur das '<'? Das ist genau mein Fall. Und wenn nicht, ist der Parser falsch oder habe ich die Stelle in der XML-Spezifikation verpasst? http://w3.org/TR/xml/#NT-AttValue – Boldewyn

+0

OK, jetzt sehe ich den Punkt, den Sie versuchen zu bekommen. Der Beitrag wurde mit einem Beispiel aktualisiert, das in Firefox Parierfehler anzeigt, aber Parsen würde, wenn Sie nie entkommen wollten>. – Douglas

+1

Ja, jetzt denken wir gleich. Colin und ich haben das auch gefunden. Es scheint, dass dies zumindest in der "XML-Teil von SGML" -Welt das einzige relevante Beispiel ist, bei dem ">" sinnvoll ist. – Boldewyn

0

dachte ich nur ein weiteres Beispiel, wo Sie brauchen > in HTML5 zu zitieren (nicht XHTML5) Dokumente: Wenn Sie es in Attribute ohne Anführungszeichen müssen (was etwas ist, kann das natürlich argumentiert werden).

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

zu XHTML gleichwertig sein sollte

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

Aber dann wieder, (? <! X) HTML ist nicht SGML.

0

Stellen Sie sich vor, Sie haben den folgenden Text this is a not a ]]> nice day und Sie beschließen, es durch CDATA-Abschnitte <![CDATA[this is a not a ]]> nice day]]> zu umgeben.

Um das zu vermeiden (und Parsen von SGML-Fragmenten mit unterminierten markierten Abschnitten zu ermöglichen), Klausel 10.4 der ISO 8879: 1986 erklärt, dass das Auftreten von ]]> außerhalb eines markierten Abschnitts ein Fehler vorliegt.

Auch in den Zeiten von SGML waren markierte Abschnitte sehr beliebt, da sie nicht nur für CDATA (wie in XML), sondern auch für RCDATA (nur Entities und Character Referenzen erlaubt) und IGNORE und INCLUDE (erlaubt für die Erkennung von Markup in ihnen).

Zum Beispiel ist eine in SGML könnte schreiben:

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

, die gleich ist:

<b>]]&gt;</b>