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 sollen. 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 weitere 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-Gateways 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ßbuchstaben 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 Unicode-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 Zeichen: 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 Apostroph (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 existieren 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 Fragezeichen 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 Überschneidung 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 enthaltene 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