| In vielen Anwendungen werden einzelne Zeichen als "Steuerzeichen" mit besonderer Bedeutung verwendet. | Zur Verwendung der gleichen Zeichen in Texten werden diese Zeichen speziell codiert - "maskiert". |
Zeichencodes
|
PC-Codes für Buchstaben, Ziffern und Sonderzeichen |
| HTML | Maskierung von Zeichen in Webseiten |
Maskierung und Codierung |
|
|
Der Begriff dürfte nicht 'wissenschaftlich' eindeutig zu definieren sein.
Einige Indizien müssen genügen: ● Das Thema betrifft die Darstellung von Zeichen im Quelltext von Programmen. ● Das Ziel ist oft die Trennung von Anweisungen (Befehlen) und Daten (insbesondere von Texten). ● In anderen Fällen ist das Ziel, Zeichen in Text-Daten einzufügen, die im Quelltext nicht vorkommen können oder dürfen. |
In allen Programmiersprachen werden ausgewählte Zeichen als Anweisungen
oder als Teile davon verwendet. Unabhängig davon muss es einen Weg geben,
um die gleichen Zeichen in Text-Daten zu verwenden. ● Die wichtigste Aufgabe der Maskierung ist die Unterscheidung, ob ein Zeichen als Teil von Text-Daten oder einer Anweisung dienen soll. |
|
Beispiel:
●
In HTML und
XML werden
Anweisungen in < > Klammern
eingeschlossen. Der gesamte übrige Quelltext wird als Text-Daten verstanden,
die (auf der Webseite) angezeigt werden sollen.● Ein Zeichen < im HTML Quelltext bedeutet daher "Beginn einer Anweisung" ● Innerhalb von HTML Text-Daten dürfen daher keine < > Zeichen vorkommen - Das würde jeder Browser als Anweisung auffassen. |
Beispiel:
●
Alle gängigen Programmiersprachen arbeiten genau umgekehrt:Text-Daten werden in "" eingeschlossen, der gesamte übrige Quelltext wird als Anweisungen verstanden. ● Ein Zeichen " im Javascript Quelltext bedeutet daher "Beginn oder Ende von Text-Daten" ● Im Quellcode von Programmiersprachen dürfen daher innerhalb von Strings (Texten) keine " Zeichen vorkommen. |
| In allen Fällen müssen spezielle Maßnahmen getroffen werden, wenn es notwendig ist, die betreffenden (Steuer)-Zeichen innerhalb von Strings als Text-Zeichen darzustellen. Jede Programmiersprache bietet für diesem Fall eine spezielle Syntax (Grammatik) zur Codierung bzw. Maskierung. |
Die betreffenden Zeichen werden maskiert, d.h. sozusagen hinter einer Maske versteckt.
In solchen genau bezeichneten Fällen werden sie ausnahmsweise
nicht als Steuerzeichen verwendet. Zur Anzeige der betreffenden Text-Daten (Strings) wird die Maskierung von der Software entfernt. |
|
Beispiel HTML:
So sieht der HTML Quelltext aus, um ein < Zeichen im
Text darzustellen:
ein < Zeichen
Das < Zeichen wurde maskiert.
|
Beispiel Javascript:
So sieht der JS Quelltext aus, um ein " Zeichen
im Text darzustellen:
"ein \" Zeichen"
Das " Zeichen wurde maskiert.
|
Ausweitung der Maskierung / Codierung |
|
|
In der Praxis wird zwischen Maskierung und Codierung nicht streng unterschieden.
Beiden Begriffe beschreiben, wie man bestimmte Zeichen im Quelltext von
Programmen verwendet. Die Beispiele dieses Kapitels demonstrieren die schrittweise Erweiterung der Begriffe: |
►
Unterscheidung zwischen Anweisung und Text-Daten ► Maskierung der 32 nicht darstellbaren Steuerzeichen ► Codierung aller 128 ASCII-Zeichen ► Codierung aller Unicode-Zeichen |
Maskierung einzelner Anweisungs-ZeichenDie Maskierung im engeren Sinne betrifft zunächst nur jene Zeichen, die in der jeweiligen Umgebung (Programmiersprache) als Steuerzeichen definiert sind, d.h. die nicht als Text sondern als Teil einer Anweisung verstanden werden.• Solche Steuerzeichen werden maskiert, wenn sie ausnahmsweise innerhalb von Strings (Texten) vorkommen sollen. |
• Jede Programmiersprache verwendet zur Maskierung eine eigene Syntax (Grammatik). • Das ist zum Glück nicht so kompliziert wie es zunächst aussieht: Die meisten modernen Programmiersprachen verwenden dazu eine ähnliche, z.T. sogar identische Syntax, z.B. Java, Javascript, Perl, PHP, Python, ... • Alle modernen Programmiersprachen bieten eine einzige ausdrückliche Ausnahme von diesem Verhalten: Mit der Funktion eval wird ein Text als Anweisung interpretiert, und zwar auch dann, wenn er maskierte Zeichen enthält. |
|
Maskierung von nicht darstellbaren Zeichen
Jeder Zeichensatz enthält solche Zeichen, z.B. "Tabulator", "neue Zeile",
"neue Seite" usw. Die meisten Zeichensätze enthalten die 32 Steuerzeichen des
→ ASCII Zeichensatzes.▲ Steuerzeichen und Leerzeichen (space, blank) im Quelltext werden vom jeweiligen Programm normalerweise ignoriert, da man sie nur verwendet, um den Quelltext selbst lesbar zu formulieren. Man muss sie daher in irgend einer Form symbolisieren, wenn sie in Text-Daten vorkommen sollen. Zweckmäßig wird dazu die gleiche Syntax verwendet wie zur Maskierung von Befehls-Zeichen. Beispiel: Zeilen-Umbruch im Quelltext HTML <br> und XHTML <br /> Alle modernen Programmiersprachen, z.B. Javascript \n VBA vbcrlf |
• Maskierung im weiteren Sinne beschreibt daher ein Verfahren, mit dem man beliebige Zeichen innerhalb von Strings darstellen kann, ohne das Zeichen selbst zu benutzen. • Manche Programmiersprachen bieten ausdrückliche Ausnahmen von diesem Verhalten: In einem genau eingegrenzten Teil des Quelltextes werden alle Zeichen in die Daten übernommen, auch Leerzeichen und Steuerzeichen (TAB, CR, LF). Beispiel HTML: Die Anweisung <pre></pre> Beispiel Perl: Ein sog. Here-Block |
Codierung aller ASCII-ZeichenDie Möglichkeit zur Maskierung wird meist auf alle 128 → ASCII-Zeichen erweitert.Beispiel \ Backslash:
In vielen modernen Programmiersprachen wird ein \ Zeichen
zur Maskierung des nachfolgenden Zeichens verwendet.Diese Maskierung wirkt auf
genau 1 beliebiges Zeichen:Die Verwendung von \$ im Quelltext bedeutet daher "verwende das Dollar-Zeichen als Text" und verhindert die Interpretation als Teil einer Anweisung. |
Beispiel Funktion chr
Alle Programmiersprachen bieten die Möglichkeit, eine Code-Zahl in ein Zeichen
umzuwandeln. Der ASCII-Code verwendet 1 Byte pro Zeichen, das entspricht einer ganzen
Zahl 0..255Die Funktion chr(65) erzeugt das Zeichen mit ASCII-Code=65, das ist das große A An Stelle der dezimalen Zahl wird oft die hexadezimale Darstellung verwendet, z.B. chr(0x41) So kann man jedes beliebige ASCII-Zeichen erzeugen, z.B. auch die 32 nicht druckbaren Steuerzeichen. Tipp: Der genaue Name der Funktion ist je nach Programmiersprache unterschiedlich, die Wirkung jedoch genau gleich. |
Codierung aller Unicode-ZeichenDie letzte logische Erweiterung der Maskierung ist die Möglichkeit zur Darstellung aller bekannten Zeichen, d.h. aller (derzeit 1114109) → Unicode-Zeichen im Quelltext.Beispiel Umlaute
Das betrifft alle nationalen Sonderzeichen, im deutschen Sprachraum
z.B. ÄÖÜäöü߀ Der Quelltext von Programmen darf normalerweise nur die 128 ASCII-Zeichen enthalten und schließt daher die Verwendung der Umlaute aus. Das ist sinnvoll, denn die Anweisungen (Befehle) von Programmen sollten international eindeutig und verständlich sein. Andernfalls müsste man eigene nationale Übersetzer-Programme (Compiler, Interpreter) für Programmiersprachen erzeugen. Sonderzeichen (Umlaute) können daher prinzipiell nicht in Anweisungen (Befehlen) vorkommen sondern nur in Daten (Texten, Strings). Bei der Maskierung oder Codierung von Sonderzeichen kommt es daher nicht darauf an, sie von Anweisungen zu unterscheiden, sondern sie überhaupt im Quelltext darzustellen. In der Informatik-Urzeit gab es dazu viele verschiedene nationale Varianten der Darstellung, z.B. die unzähligen heute noch verwendeten "nationalen Zeichensätze". Das ist in einer globalisierten Welt ein großer Nachteil, denn alle solcherart codierten Dokumente sind nur im jeweiligen Kulturkreis fehlerfrei verwendbar und müssten in jedem anderen korrekt übersetzt werden - was nicht immer gewährleistet ist. |
Beispiel Unicode-Zahl
Meist werden Sonderzeichen mit ihrer
→ Unicode-Zahl maskiert, gleich oder ähnlich wie ASCII-Zeichen mit
Funktion chr (links).Im HTML-Quelltext wird das € Zeichen (Unicode 8364) dezimal € oder hexadezimal $#x20AC; codiert. Beispiel Zeichen-Namen
Für häufig verwendete Sonderzeichen werden manchmal Namen (entities) definiert,
z.B. in HTML für das €
Zeichen €
Diese Möglichkeit sollte man keinesfalls ausnutzen !
Webseiten sind ein gutes Beispiel dafür, wie die gleichen (HTML)-Dokumente von
vielen verschiedenen Programmen auf unterschiedlichen Computern und Betriebssystemen
verwaltet, weitergeleitet und letztlich angezeigt werden.Nur wenn alle diese Programme die verwendeten Sonderzeichen richtig verstehen, werden sie letztlich richtig angezeigt - Darauf sollte man sich besser nicht verlassen. |
HTML - Maskierung und Codierung |
||||||||||
|
HTML-Webseiten enthalten ausschließlich lesbaren Text, d.h. keine mit
einem Text-Editor unlesbaren binären Zeichen. Einige dieser Zeichen, z.B.
die < > dreieckigen Klammern haben eine besondere Bedeutung
als Steuerzeichen: Alle HTML-Anweisungen werden darin eingeschlossen, z.B.
<body> </body>
|
Wenn man die gleichen Zeichen als Daten auf einer Webseite darstellen will (z.B. in genau diesem Absatz), dann darf man die Zeichen im Text nicht verwenden - Sie würden sonst als HTML-Anweisungen mißverstanden. | |||||||||
Um Steuerzeichen im Text darzustellen, wird in HTML eine "Maskierung" aus
3 Teilen verwendet:
|
Beispiel:
Dieser Text soll dargestellt werde.
Eine <dreieckige> Klammer
So sieht der HTML-Code aus, um den Text auf einer Webseite darzustellen:
Eine
<dreieckige>
Klammer
|
|||||||||
|
Zur Codierung stehen 3 verschiedene Varianten zur Auswahl: ▲ Die beiden ersten Varianten (rechts) verwenden die → ASCII Code-Nummer (0..127) oder → Unicode-Nummer (derzeit nur 0..65535 bzw. 0..0xFFFF) des betreffenden Zeichens. Sie sind allgemein anwendbar, d.h. auf jedes beliebige Unicode-Zeichen und auf jede Version von → HTML, → XHTML oder ein beliebiges anderes Mitglied der → XML-Familie. Es ist damit zu rechnen, dass zukünftige Betriebssysteme und Browser alle Unicode-Zeichen anzeigen können (0..1114109 bzw. 0..0x10FFFD). |
●
Die Codierung mit Dezimal-Code verwendet als eindeutigen
Code die dezimale Unicode-Nummer des betreffenden Zeichens. Beispiel: A für das Zeichen A (→ ASCII-Code 65) ♦ Details im nächsten Kapitel ● Die Codierung mit Hexadezimal-Code verwendet als Code den hexadezimalen Unicode. Beispiel: A für das Zeichen A ♦ Details im nächsten Kapitel |
|||||||||
|
●
Die Codierung mit einem eindeutigen Zeichen-Namen ist leichter zu merken,
dafür jedoch nicht allgemein anwendbar. Beispiel: Code lt (less than) für das < Zeichen, als fertig formulierter HTML-Code < • Die Verwendung der Text-Codes (Entities) ist in der Definition der "Sprach-Version" festgelegt und daher von dieser abhängig. Die typischen HTML-Codes (z.B. < ) können daher nicht allgemein angewendet werden. |
•
Die Liste aller (für eine bestimmte HTML- oder XML-Version) definierten
Entity Codes kann man beim W3C ansehen oder downladen. • Man kann die Entity-Liste auch mit selbst definierten Elementen ergänzen, das erfordert jedoch fortgeschrittene Kenntnisse. |
|||||||||
HTML- und XML-Maskierung mit Dezimal- oder Hexadezimal-Code |
|||||||||||||||||||||||||||||||
|
Die beiden hier vorgestellten Methoden zur Codierung sind auf jedes beliebige
→ Unicode-Zeichen
(derzeit nur im Bereich 0..0xFFFF) anwendbar. Sie funktionieren ohne jede zusätzliche Maßnahme in jeder Version von → HTML, → XHTML und in allen Mitgliedern der → XML-Familie. |
Diese Art der Codierung können sie daher im Zweifel immer anwenden - Ohne Rücksicht darauf, ob ein Entity-Namen für das betreffende Zeichen in der Sprach-Definition festgelegt wurde. | ||||||||||||||||||||||||||||||
Dezimaler Zeichencode:Jedes → Unicode-Zeichen ist durch eine Zahl (CodePoint) eindeutig charakterisiert. Man benutzt den dezimalen Code mit einem vorangestellten # Zeichen, um das Zeichen darzustellen.• Das erste Beispiel rechts zeigt die 3 Zeichen ABC - Sie können wahlweise direkt in Klartext oder in maskierter Form codiert werden. • Das zweite Beispiel zeigt die Steuerzeichen <!& - Sie dürfen nur in maskierter Form codiert werden, da sie andernfalls als Steuerzeichen interpretiert werden. |
Beispiel für den Text ABC HTML-Code: ABC Dezimalcode der Zeichen: 65, 66, 67 Alternativer HTML-Code: ABC Beispiel für Sonderzeichen <!& Dezimalcode der Zeichen: 60, 33, 38 Alternativer HTML-Code: <!& |
||||||||||||||||||||||||||||||
Hexadezimaler Zeichencode:Jedes → Unicode-Zeichen kann alternativ durch seinen hexadezimalen Code dargestellt werden, wenn die Zeichen #x vorangestellt werden.• Die Beispiele rechts zeigen die gleichen Zeichen wie oben mit ihrem dezimalen Code. ♦ Details zum Dezimal- und Hexadezimal-Code der → ASCII-Zeichen. |
Beispiel für den Text ABC HTML-Code: ABC Hexadezimalcode der Zeichen: #41, #42, #43 Alternativer HTML-Code: ABC Beispiel für Sonderzeichen <!& Hexadezimalcode der Zeichen: #3C, #21, #26 Alternativer HTML-Code: <!& |
||||||||||||||||||||||||||||||
Unicode-ZeichenDie Codierung mit Dezimal- oder Hexadezimal-Code ist nicht auf die 127 ASCII-Zeichen beschränkt. Auf diese Weise können derzeit alle Unicode-Zeichen U<FFFF codiert werden.Die Beispiele sind aus folgenden Bereichen gewählt: → Latin-1 Supplement, Latin Extended-A, Greek and Coptic, Cyrillic, Arabic, Currency Symbols, Arrows, Mathematical Operators, Geometric Shapes ... Die Zeichen in Spalte chr sind keine Bilder, sondern echte Buchstaben, die sich wie jedes andere Zeichen dieser Webseite kopieren und in andere Programme einsetzen lassen. ♦ Details zum Unicode |
Einige Beispiele HTML-codierter Unicode-Zeichen
|
||||||||||||||||||||||||||||||
URI-Maskierung |
|
|
Die Anforderung von Webseiten aus dem Internet erfolgt nach den Regeln des HTTP-Standards.
Anforderung (GET, POST) und Antwort (der HTML-Quelltext der Webseite) werden im einfachsten
Fall in Klartext übertragen. Für die Anforderung sind keine Sonderzeichen zulässig, sondern nur eine begrenzte Auswahl der ASCII-Zeichen. |
In der Anforderung (sichtbar in der Browser-Adresszeile) haben einige Zeichen
spezielle Bedeutung als Steuerzeichen, z.B.
#%&+/:=?
Diese und andere Sonderzeichen müssen daher maskiert werden, wenn sie im Text
vorkommen sollen.
|
URI-Codierung (vereinfacht !)▲ Im Klartext werden nur Ziffern 0..9, Großbuchstaben A..Z und Kleinbuchstaben a..z codiert. |
▲
Alle anderen Zeichen des →
ASCII-Codes (Unicode U+00..U+7F) werden mit einem % Zeichen,
gefolgt vom hexadezimalen Code maskiert. ▲ Alle anderen Unicode-Zeichen werden zuerst HTML-Codiert, danach URI-codiert. |
|
Beispiel: Einfache URI-Befehlszeile
http://domain.com/verzeichnis/seite.htm
|
Beispiel: URI-Befehlszeile mit Argumenten (z.B. für eine Suchmaschine) Anfrage-Text: reich http://xyz.com/anfrage.htm?suche=reich
|
|
Beispiel: Codierung von ASCII Sonderzeichen: Anfrage-Text: reich & gesund ASCII-Codes von Leerzeichen (#20) und & (#26) http://abc.com/anfrage.htm?suche=reich%20%26%20gesund
Beispiel: Codierung von HTML Sonderzeichen: Anfrage-Text: reich und schön HTML-Code: reich & schön ASCII-Code von ; (#3B) http://rst.com/anfrage.htm?suche=reich%20%26%20sch%26ouml%3Bn
|
|
Namen von Verzeichnissen und Dateien:Wenn sie eigene Webseiten herstellen, dann sollten sie die Namen aller Verzeichnisse (Ordner) und Dateien so wählen, dass Probleme bei deren Adressierung nach Möglichkeit ausgeschlossen sind.Das gilt auch für Dateien, die sie im Internet versenden, z.B. als Mail-Anhang oder in einem Archiv (*.zip) ▲ Für Datei-Namen nur Ziffern 0..9 und kleine Buchstaben a..z verwenden, allenfalls als Trennzeichen das _ underline. ▼ Keine Leerzeichen und keine anderen ASCII-Zeichen wie ,;.:-!?=+- verwenden. ▼ Keinesfalls nationale Sonderzeichen äöüß verwenden ! |
▼ Keine Großbuchstaben verwenden. Das ist zwar zulässiger URI-Code, kann jedoch hartnäckige Probleme verursachen: Windows-Systeme unterscheiden als einzige nicht zwischen großen und kleinen Zeichen. Ein Link <a href="ziel.htm"></a>
findet daher auf ihrem eigenen Win-PC auch schlampig benannte
Webseiten Ziel.htm, ziel.HTM usw. Professionelle
Internet-Provider verwenden jedoch vorzugsweise Linux-PC: Diese unterscheiden
große und kleine Zeichen, daher werden die beiden angegebenen Datei-Beispiele
bei Anklicken des Links nicht gefunden !
|
Namen von Variablen:Wenn sie dynamische Webseiten programmieren, dann legen sie die Namen von Variablen für die Übergabe von Argument-Daten nach den gleichen Regeln fest wie die Namen von Webseiten.Das betrifft z.B. die Namen in HTML-Formularen: <input type="text" name="varname" />
|
Wenn das Formular abgesendet wird, dann gelangen die Namen und die eingetragenen Daten der Formular-Felder in die URI-codierte HTTP-Anfrage. Vermeiden sie vorsorglich jedes Problem bei der Codierung durch Vergabe 'sicherer' Namen - ohne Leerzeichen, Sonderzeichen, Umlaute. |
| ♦ Details und Live-Beispiele zur URI-Codierung | |
Maskierung in Programmiersprachen |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
In Programmiersprachen sind Strings (Texte) von Anweisungen klar getrennt -
Normalerweise durch Einschluss in ""
oder '' Zeichen, z.B. (Javascript)
var text="Demo";
▲ Im einfachsten Fall müssen daher nur diese beiden Zeichen maskiert werden, wenn sie im Text vorkommen sollen. Das wird mit einem vorangestellten \ backslash-Zeichen bewirkt:
var text="Demo
\"mit\" Maske";
▲ Einige Programmiersprachen wie Perl oder PHP können Variable innerhalb von Strings verwenden, z.B.
$name="Mayer";
In diesem Fall muss mindestens auch das $-Zeichen maskiert werden,
wennn es im Text vorkommen soll:
$text="Anna $name"; $text="Ein \$-Zeichen";
▲ Darüber hinaus werden für häufig verwendete Sonderzeichen spezielle Codes verwendet, die ebenfalls mit \ backslash beginnen, z.B. \n für einen Zeilen-Umbruch (neue Zeile, ASCII-Steuerzeichen #0A, linefeed):
alert("Erste und\nzweite Zeile");
|
Die meisten modernen Programmiersprachen verwenden die gleichen Regeln
zur Maskierung von Sonderzeichen, z.B. → C++, Java, Javascript, Perl, PHP, ... ▲ Im einfachsten Fall wird lediglich ein \ backslash-Zeichen vor das zu maskierende Zeichen gestellt. ▲ Für einige häufig verwendete Zeichen sind Abkürzungen möglich, die ebenfalls mit \ backslash beginnen, z.B. \n für einen Zeilen-Umbruch (neue Zeile, → ASCII-Steuerzeichen #0A, linefeed) ▲ Für alle 127 → ASCII-Zeichen (und im Zweifel immer) kann man Funktionen zur Umwandlung des Zeichen-Codes in ein Zeichen verwenden. ▲ Zur Codierung von → Unicode-Zeichen >U+007F sind je nach Programmiersprache unterschiedliche Verfahren möglich. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Escape Code - Maskierung von SonderzeichenDie Tabelle rechts zeigt die Codierung ausgewählter ASCII-Zeichen in Programmiersprachen (C++, Java, Javascript, Perl, PHP, ..)Diese Codes funktionieren in fast allen modernen Programmiersprachen. Einzige Bedingung ist die Anwendung innerhalb eines Strings. Spezielle Beispiele: • In C++ wird häufig ein Null-Byte \0 zum Abschluss von Strings verwendet. • Der Tabulator \t wird oft als Trennzeichen (field separator) beim Transport von Daten in einfachen Text-Dateien verwendet. • Das LF-Zeichen wird als Zeilen-Umbruch ("Neue Zeile") allgemein häufig verwendet. |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Maskierung von Zeichen |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Diese Technik wird verwendet, wenn es 'reservierte Zeichen' gibt: In HTML sind dreieckige Klammern < > für Auszeichnungen (tags) reserviert, z.B. <b> für 'fett gedruckt'. Wenn eine dreieckige Klammer als Zeichen angezeigt werden soll, dann muss man einen speziellen Code verwenden, welcher das Zeichen selbst 'versteckt' (maskiert). ♦ Details zur Maskierung von HTML-Zeichen |
Beispiel: Das Zeichen < in HTML:
<b>Fett</b> und Zeichen <
Live-Ergebnis:
Fett und Zeichen <
Das Zeichen selbst wird für tags wie <b> verwendet und nicht angezeigt. Der Code < maskiert das Zeichen <, welches angezeigt wird. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
In vielen Bereichen der IT müssen Zeichen maskiert werden: Fast alle Programmiersprachen, Internet-Adressen (→ URLs), usw. Dabei werden unterschiedliche Methoden der Maskierung verwendet. Generell müssen all jene Zeichen maskiert werden, welche eine spezielle Bedeutung im jeweiligen IT-Bereich haben. |
Es gibt keinen allgemeinen Algorithmus zur Maskierung. Sie finden die jeweiligen Regeln
bei den einzelnen Bereichen (z.B.
→ HTML, → URL). Nachfolgend 2 häufig verwendete Maskierungs-Tabellen |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|