fn:escape-html-uri

(Auszug aus "XSLT 2.0 & XPath 2.0" von Frank Bongers, Kapitel 5.)

A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z

   

Kategorie: Stringfunktionen – Manipulation

Herkunft: XPath 2.0

Rückgabewert: Ein String xs:string, der dem Eingabestring mit gemäß RFC 2732 maskierten Sonderzeichen entspricht

Aufruf/Argumente:

fn:escape-html-uri($uri-string)

$uri-string:
Ein String xs:string, der als URI-String oder Teil eines URI-Strings interpretiert wird, und in dem enthaltene Sonderzeichen gemäß den Regeln für URI-Escaping maskiert (escaped) werden sol­len. Wird der Funktion die leere Sequenz übergeben, so gibt sie den leeren String zurück.

Verwendungszweck:

Die Funktion fn:escape-html-uri() wendet auf den ihr übergebenen String xs:string die Regeln für URI-Escaping nach RFC 2396 an. Hiermit soll gewährleistet werden, dass der übergebene String, der einen URI-String bzw. den Teilstring eines URI-Strings repräsentiert, nach der Umwandlung einen gültigen URI-String ohne in diesem Kontext verbotene Zeichen darstellt. Vom Escaping ausgenommen sind diejenigen Zeichen, die zu den druckbaren ASCII-Zeichen gezählt werden.

Im Eingabestring enthaltene Sonderzeichen werden durch hexadezimal kodierte Escape-Sequenzen %xx (x steht für eine Hexadezimalziffer) ersetzt. Der Ersetzungsmodus bezieht sich auf die nachfolgend erläuterten, in RFC 2396 definierten Zeichengruppen.

Escaped werden müssen im URI-String enthaltene Leerzeichen (SPC) und wei­tere Zeichen, die entweder im URI-String eine Trennfunktion besitzen, eine Fehlerquelle auf Grund zwischen Anwendungen und Plattformen variierender Interpretationen darstellen oder im Kontext der Protokolle von Internet-Gate­ways verwendet werden.

Zeichen Bedeutung Unicode Zeichen Bedeutung Unicode

 

Leerzeichen

U+0020

{

geschweifte Klammer links

U+007B

<

spitze Klammer links

U+003C

|

Pipe

U+007C

>

spitze Klammer rechts

U+003E

}

geschweifte Klammer rechts

U+007D

#

Hash-Zeichen*

U+0023

\

Backslash

U+005C

%

Prozentzeichen

U+0025

^

Circumflex

U+005E

"

APL quote

U+0022

[

eckige Klammer links*

U+005B

`

Gravis

U+0060

]

eckige Klammer rechts*

U+005D

Tabelle: Zu escapende Zeichen gemäß RFC 2396 (*=: Im Kontext nicht anwendbar).

Allgemein ist es üblich, die hexadezimalen Escape-Sequenzen in Großbuchsta­ben zu kodieren. Die Funktion fn:escape-html-uri() verfährt entsprechend, auch um einen zuverlässigen Stringvergleich von URI-Strings mit maskierten Zeichen zu ermöglichen.

Escape-Sequenz besteht aus den beiden letzen Stellen der Unicode-Angabe
Anders als bei Character References sind die beiden führenden Nullen, die den oben genannten letzten beiden Stellen vorangehen, nicht optional, sondern an dieser Stelle verboten! Als Escape-Sequenz werden nur die beiden letzten Stellen der Uni­code-Angaben verwendet: %3C für U+003C (spitze Klammer links).

Zwei Gruppen von Zeichen

In der RFC 2396 und der anschließenden RFC 2732 (für IPv6) sind diejenigen Zeichen gelistet, die in Bezug auf URI-Strings gesondert behandelt werden sollten oder unter Umständen maskiert werden müssen. Diese werden als »reservierte« Zeichen bezeichnet. Ihnen gegenüber steht eine weitere Gruppe, die »nicht reservierten« Zeichen.

Nicht reservierte Zeichen:

Zu den nicht reservierten Zeichen zählen die alphanumerischen Zeichen (alphanum), also alle Buchstaben und Ziffern des ASCII-Zeichensatzes sowie die in der folgenden Tabelle aufgeführten Zei­chen: die Markierungszeichen (marks).

Die Markierungszeichen:

Zeichen Bedeutung Unicode Zeichen Bedeutung Unicode

-

Bindestrich

U+002D

~

Tilde

U+007E

_

Unterstrich

U+005F

*

Asterisk

U+002A

.

Punkt

U+002E

(

runde Klammer links

U+0028

'

Apostroph

U+0027

)

runde Klammer rechts

U+0029

!

Ausrufezeichen

U+0021

%

Prozentzeichen

U+0025

Tabelle: Die Markierungszeichen gemäß RFC 2396.

Die nicht reservierten Zeichen müssen im Allgemeinen nicht escaped werden, jedoch ist dies gestattet. Die Syntax des Links wird dabei nicht verändert.

Vorsicht bei verschiedenen Zeichen mit identischen Glyphen
Bei vielen Zeichen ist zu beachten, dass es mit optisch identischen Glyphen repräsentierte Zeichen abweichender Bedeutung gibt; für den Apo­stroph (Hochkomma) beispielsweise die linken und rechten einfachen Anführungszeichen U+2018 und U+2019 sowie die einfachen geraden Anführungszeichen U+2032 und U+2033. Ähnliche Zweideutigkeiten exis­tieren für den Bindestrich-Minus.

Reservierte Zeichen (reserved):

Die reservierten Zeichen haben insofern besondere Bedeutung, als dass sie als Trennzeichen (delimiter) zwischen funktionalen Bestandteilen eines URI fungieren können. So leitet das Frage­zeichen einen Querystring ein, der Doppelpunkt einen Portbezeichner.

In dieser Bedeutung verwendet, dürfen die reservierten Zeichen nicht escaped werden. Dies entspricht dem Verhalten von fn:escape-html-uri().

Hinweis: Maskierung reservierter Zeichen
Die Verwendung der reservierten Zeichen in ihrer lexikalischen Bedeutung in Teilen von URI-Strings ist zwar ebenfalls gestattet (deshalb die Überschnei­dung mit den zu escapenden Zeichen). In diesem Falle ist das maskieren der Zeichen erforderlich. Da dies durch die Funktion fn:escape-html-uri() grundsätzlich nicht vorgenommen wird, kann dies nur mit Hilfe der Funktion fn:encode-for-uri() erreicht werden.

Zeichen Bedeutung Unicode Zeichen Bedeutung Unicode

;

Semikolon

U+003B

+

Plus

U+002B

/

Slash (Solidus)

U+0037

$

Dollarzeichen

U+0024

?

Fragezeichen

U+003F

,

Komma

U+002C

:

Doppelpunkt

U+003A

#

Hash-Zeichen

U+0023

@

Commercial At

U+0040

[

eckige Klammer links*

U+005B

&

Ampersand

U+0026

]

eckige Klammer rechts*

U+005D

=

Gleichheitszeichen

U+003D

Tabelle: Die reservierten Zeichen gemäß RFC 2396 (*=: Im Kontext nicht anwendbar).

Verbotene Zeichen:

In URI-Strings generell verboten ist eine dritte Gruppe von Zeichen: an erster Stelle die nicht druckbaren Zeichen (control characters), also die ersten 33 ASCII-Zeichen von U+0000 bis U+0032, sowie das Zeichen U+007F (DEL). Allerdings sind sie – abgesehen von TAB, LF und CR – in XML-Dokumenten ebenfalls nicht gestattet.

Beispiel – Escapen eines nicht druckbaren Zeichens:

fn:escape-html-uri("http://www.beispiel.org/~mein account"

ergibt

"http://www.beispiel.org/~mein%20account"

Das im ursprünglichen URI-String enthal­tene Leerzeichen wird, da es nicht zu den druckbaren Zeichen gehört, mit %20 maskiert.

Funktionsdefinition:

XPath 1.0:

Funktion nicht verfügbar

XPath 2.0:

fn:escape-html-uri($uri as xs:string?) as xs:string

   

<< zurück vor >>
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an:

Copyright © Galileo Press, Bonn 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version ausdrucken.
Ansonsten unterliegt dieses Kapitel aus dem Buch "XSLT 2.0 & XPath 2.0 ― Das umfassende Handbuch" denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Galileo Press, Rheinwerkallee 4, 53227 Bonn