Abgrenzer

Eine stilistische Darstellung eines Fragments von a CSV-Formatierte Textdatei. Die Kommas (rot) werden als Feldgrenzwerte verwendet.

A Abgrenzer ist eine Sequenz von einer oder mehrerer Figuren zum Angeben der Grenze zwischen separaten, unabhängigen Regionen in einfacher Text, Mathematische Ausdrücke oder andere Datenströme.[1][2] Ein Beispiel für einen Trennzeichen ist das Komma Charakter, der als a Feldtrainer in einer Folge von Komma-getrennte Werte. Ein weiteres Beispiel für einen Trennzeichen ist die Zeitlücke, die zum Trennen von Buchstaben und Wörtern in der Übertragung von verwendet wird Morse-Code.

Im MathematikEs werden häufig Begrenzer verwendet, um den Umfang von einem zu spezifizieren Betriebund kann beide als isolierte Symbole auftreten (z. B.,, Doppelpunkt in "") und als ein Paar gegensätzlicher Symbole (z. B.,, abgewinkelte Klammern in ).

Grenzen stellen eines der verschiedenen Mittel zur Angabe von Grenzen in a dar Datenstrom. Deklarative NotationZum Beispiel ist eine alternative Methode, die zu Beginn eines Datenstroms ein Längenfeld verwendet, um die Anzahl der Zeichen anzugeben, die der Datenstrom enthält.[3]

Überblick

Grenzwerte können als Feld- und Aufzeichnungsgrenzwerte oder als Bracket -Abgrenzer charakterisiert werden.

Feld- und Aufzeichnungsgrenzwerte

Feldgrenzwerte separate Datenfelder. Aufzeichnungsgrenzwerte getrennte Gruppen von Feldern.[4]

Zum Beispiel verwendet das CSV -Dateiformat ein Komma als Trennzeichen zwischen Felder, und ein Ende der Linie Indikator als Trennzeichen zwischen Aufzeichnungen:

Fname, Lname, Alter, Gehalt Nancy, Davolio, 33, $ 30000 Erin, Borakova, 28, $ 25250 Tony, Raphael, 35, $ ​​28700

Dies gibt eine einfache an Flat -Datei -Datenbank Tisch Verwenden des CSV -Dateiformats.

Bracket Grenzwerte

Bracket Delimiter, auch Block Delimiter, Region Delimiter oder ausgewogene Abgrenzer genannt, markieren sowohl den Start als auch das Ende einer Textregion.[5][6]

Häufige Beispiele für Klammergrenzwerte sind:[7]

Grenzwerte Beschreibung
( ) Klammern. Das Lispeln Die Programmiersprache Syntax wird hauptsächlich durch die Verwendung von Klammern als erkennbar bezeichnet.[8]
{ } Zahnspangen (auch genannt geschweifte Klammern.[9]))
[ ] Klammern (üblicherweise verwendet, um ein Index zu bezeichnen)
< > Winkelklammern.[10]
" " häufig verwendet, um zu bezeichnen String -Literale.[11]
' ' häufig verwendet, um zu bezeichnen Charakterliterale.[11]
?> Wird verwendet, um XML anzuzeigen Verarbeitungsanweisungen.[12]
/* */ verwendet, um zu bezeichnen Kommentare in einigen Programmiersprachen.[13]
<% %> in einigen verwendet Webvorlagen Sprachgrenzen festlegen. Diese werden auch genannt Vorlage Grenzwerte.[14]

Konventionen

In der Vergangenheit haben Computerplattformen bestimmte Grenzwerte durch Konvention verwendet.[15][16] Die folgenden Tabellen zeigen einige Beispiele für den Vergleich.

Programmiersprachen (Siehe auch, Vergleich der Programmiersprachen (Syntax)).

Saitenliteral Ende der Aussage
Pascal Singlequote Semikolon
Python Doublequote, Singlequote Ende der Linie (EOL)

Feld- und Aufzeichnungsgrenzwerte (Siehe auch, ASCII, Steuerzeichen).

Ende des Feldes Ende der Aufzeichnung Ende der Datei
Unix-artig Systeme einschließlich Mac OS, Amigaos Tab Lf keiner
Fenster, MS-DOS, OS/2, CP/m Tab CRLF Keine (außer in CP/M), Kontrolle-Z[17]
Klassischer Mac OS, Apfeldos, Prodos, GS/OS Tab Cr keiner
ASCII/Unicode Einheitsabscheider
Position 31 (U+001f)
Aufzeichnungsabscheider
Position 30 (U+001E)
Dateiabscheider
Position 28 (U+001c)

Grenzkollision

Grenzkollision ist ein Problem, das auftritt, wenn ein Autor oder Programmierer Grenzwerte in Text einführt, ohne dass er tatsächlich als Grenzen zwischen getrennten Regionen interpretiert wird.[4][18] Bei XML kann dies beispielsweise auftreten, wenn ein Autor versucht, eine anzugeben Winkelträger Charakter.

Bei den meisten Dateitypen gibt es sowohl einen Feldtrennzeichen als auch ein Datensatz -Abgrenzer, die beide Kollision unterliegen. Im Falle des Komma-getrennte Werte Zum Beispiel kann eine Feldkollision auftreten, wenn ein Autor versucht, ein Komma als Teil eines Feldwerts (z. B. Gehalt = "30.000 US -Dollar") einzuschließen, und die Aufzeichnungskollision würde immer dann auftreten, wenn ein Feld mehrere Zeilen enthielt. Sowohl Datensatz- als auch Feld -Kollisionskollisionen finden häufig in Textdateien statt.

In einigen Kontexten kann ein böswilliger Benutzer oder Angreifer versuchen, dieses Problem absichtlich auszunutzen. Folglich kann die Kollision des Grenzwerters die Sicherheitsquelle sein Schwachstellen und Heldentaten. Bösartige Benutzer können die Kollision der Begrenzer in Sprachen wie z. B. nutzen Sql und Html so bekannte Angriffe einsetzen wie SQL-Injektion und Cross-Site-Scripting, beziehungsweise.

Lösungen

Da die Kollision der Begrenzung ein sehr häufiges Problem ist, wurden verschiedene Methoden zur Vermeidung erfunden. Einige Autoren versuchen möglicherweise, das Problem zu vermeiden, indem sie einen Trennzeichen (oder eine Abfolge von Zeichen) auswählen, die wahrscheinlich im Datenstrom selbst nicht erscheinen. Dies ad hoc Der Ansatz kann geeignet sein, aber er hängt notwendigerweise von einer korrekten Vermutung ab, was im Datenstrom erscheinen wird, und bietet keine Sicherheit gegen böswillige Kollisionen. Es werden daher auch andere formalere Konventionen angewendet.

ASCII Grenzterte Text

Die ASCII- und Unicode-Zeichensätze wurden entwickelt, um dieses Problem durch die Bereitstellung von nicht druckenden Zeichen zu lösen, die als Abgrenzer verwendet werden können. Dies sind der Bereich von ASCII 28 bis 31.

ASCII Dez Symbol Unicode -Name Gemeinsamen Namen Verwendungszweck
28 Informationsabscheider vier Dateiabscheider Ende der Datei. Oder zwischen einer Verkettung dessen, was sonst getrennte Dateien sein könnten.
29 Informationsabscheider drei Gruppenabscheider Zwischen Datenabschnitten. Nicht in einfachen Datendateien benötigt.
30 Informationsabscheider zwei Aufzeichnungsabscheider Ende eines Datensatzes oder einer Reihe.
31 Informationsabscheider eins Einheitsabscheider Zwischen Feldern eines Protokolls oder Mitgliedern einer Reihe.

Die Verwendung von ASCII 31 31 Einheitsabscheider als Feldabscheider und ASCII 30 Aufzeichnungsabscheider Löst das Problem von Feld- und Aufzeichnungsgräben, die in einem Textdatenstrom erscheinen.[19]

Escape-Zeichen

Eine Methode zur Vermeidung von Trennzeichenkollisionen ist die Verwendung Flucht Charaktere. Aus Sicht des Sprachdesigns sind diese ausreichend, aber sie haben Nachteile:

  • Der Text kann unlesbar gemacht werden, wenn sie mit zahlreichen Fluchtzeichen übersät sind, ein Problem, das als als bezeichnet wird Lieger Zahnstocher -Syndrom (aufgrund der Verwendung von \, um zu entkommen / in Perl Reguläre Ausdrücke, führt zu Sequenzen wie "\/\/");
  • Text wird schwer durch den regulären Ausdruck zu analysieren
  • Sie benötigen einen Mechanismus, um den Flucht zu "entkommen", wenn sie nicht als Fluchtcharaktere gedacht sind. und
  • Obwohl sie leicht zu tippen, können sie für jemanden kryptisch sein, der mit der Sprache nicht vertraut ist.[20]
  • Sie schützen nicht vor Injektionsangriffen

Fluchtabfolge

Escape -Sequenzen ähneln Fluchtzeichen, außer dass sie normalerweise aus einer Art Mnemonik bestehen, anstatt nur aus einem einzigen Charakter. Eine Verwendung ist in String -Literale das beinhaltet ein Doublequote (") -Charakter. Zum Beispiel in Perl, der Code:

drucken "Nancy sagte \ x22Hello World! \ X22 zu der Menge.";  ### verwenden \ x22 

erzeugt die gleiche Ausgabe wie:

drucken "Nancy sagte" Hallo Welt! "Zu der Menge.";  ### Escape char verwenden 

Ein Nachteil von Escape -Sequenzen, wenn sie von Menschen verwendet werden, ist die Notwendigkeit, sich die Codes auswendig zu merken, die einzelne Zeichen repräsentieren (siehe auch: Charakterentitätsreferenz, Numerische Zeichenreferenz).

Zwei Zitat Grenzwerte

Im Gegensatz zu Escape -Sequenzen und Fluchtzeichen bieten zwei Grenzwerte eine weitere Möglichkeit, um die Kollision zu vermeiden. Einige Sprachen ermöglichen beispielsweise die Verwendung eines einzelnen Zitats (') oder eines doppelten Zitats ("), um ein String -Literal anzugeben. Zum Beispiel in Perl:

drucken 'Nancy sagte "Hallo Welt!" zu der Menge. '; 

erzeugt die gewünschte Ausgabe, ohne dass Flucht erforderlich ist. Dieser Ansatz funktioniert jedoch nur, wenn die Zeichenfolge nicht enthält beide Arten von Anführungszeichen.

Polsterung zitieren Graben

Im Gegensatz zu Escape -Sequenzen und Fluchtzeichen bieten Padding -Abgrenzer eine weitere Möglichkeit, um die Kollision zu vermeiden. Visual BasicVerwendet zum Beispiel Doppelzitate als Grenzwerte. Dies ähnelt der Flucht vor dem Trennzeichen.

drucken "Nancy sagte" "Hallo Welt!" "Zu der Menge." 

erzeugt die gewünschte Ausgabe, ohne dass Flucht erforderlich ist. Wie regelmäßig kann es jedoch verwirrend werden, wenn viele Zitate verwendet werden. Der Code zum Drucken des obigen Quellcodes würde verwirrender aussehen:

drucken "Print" "Nancy sagte" "" Hallo Welt! "" "Zu der Menge." "" " 

Konfigurierbare alternative Zitat -Abgrenzer

Im Gegensatz zu doppelten Grenzwerten sind mehrere Grenzwerte noch flexibler, um die Kollision zu vermeiden.[7]: 63

Zum Beispiel in Perl:

drucken qq^nancy will nicht sagen "Hallo Welt!" mehr.^; drucken QQ@Nancy will nicht "Hallo Welt!" mehr.@; drucken QQ (Nancy will nicht "Hallo Welt!" Sagen.); 

Alle erzeugen die gewünschte Ausgabe durch Verwendung von Anführungsbediener, die es jedem bequemen Charakter als Trennzeichen ermöglichen. Obwohl diese Methode flexibler ist, unterstützen nur wenige Sprachen sie. Perl und Rubin sind zwei, die tun.[7]: 62[21]

Inhaltsgrenze

A Inhaltsgrenze ist eine spezielle Art von Trennzeichen, die speziell für die Widerstand der Trennzeichenkollision ausgelegt ist. Es ermöglicht dem Autor, eine Abfolge von Zeichen anzugeben, die garantiert immer eine Grenze zwischen Teilen in einer mehrteiligen Nachricht ohne andere mögliche Interpretation anzeigen.[22]

Der Trennzeichen wird häufig aus einer zufälligen Reihenfolge von Zeichen erzeugt, die statistisch unwahrscheinlich ist, dass sie im Inhalt auftreten. Dies kann von einer identifizierenden Marke wie a folgt Uuid, a Zeitstempel, oder ein anderes Unterscheidungszeichen. Alternativ kann der Inhalt gescannt werden, um sicherzustellen, dass ein Trennzeichen nicht im Text erscheint. Dies kann es dem Trennzeichen ermöglichen, kürzer oder einfacher zu sein und die menschliche Lesbarkeit des Dokuments zu erhöhen. (Siehe z., MIME, Hier Dokumente).

Whitespace oder Eindrückung

Einige Programmier- und Computersprachen ermöglichen die Verwendung von Whitespace -Grenzwerte oder Vertiefung als Mittel zur Angabe von Grenzen zwischen unabhängigen Regionen im Text.[23]

Regelmäßige Expressionssyntax

Bei der Angabe a regulären AusdruckEs können auch alternative Abgrenzer verwendet werden, um die Syntax für zu vereinfachen passen und Auswechslung Operationen in Perl.[24]

Beispielsweise kann eine einfache Übereinstimmung in Perl mit der folgenden Syntax angegeben werden:

$ String1 = 'Nancy sagte "Hallo Welt!" zu der Menge. ';  # Geben Sie eine Zielzeichenfolge an drucken $ String1 = ~ m/[aeiou]+/;  # Passen Sie ein oder mehrere Vokale an 

Die Syntax ist flexibel genug, um Übereinstimmungsvorgänge mit alternativen Abgrenzern anzugeben, sodass die Kollision des Grenzwerters leicht vermieden wird:

$ String1 = "Nancy sagte" http: //hello/world.htm "ist keine gültige Adresse."; # Zielzeichenfolge     drucken $ String1 = ~ m@http: //@;  # Übereinstimmung mit einem alternativen regulären Ausdrucksgrenzwert drucken $ String1 = ~ m {http: //};  # Gleich wie zuvor, aber unterschiedlicher Trennzeichen drucken $ String1 = ~ M! http: //!;  # Gleich wie zuvor, aber unterschiedlicher Trennzeichen. 

Hier Dokument

A Hier Dokument Ermöglicht die Einbeziehung willkürlicher Inhalte durch Beschreibung einer speziellen Endsequenz. Viele Sprachen unterstützen dies einschließlich Php, Skripte verprügeln, Rubin und Perl. Ein Dokument hier beginnt mit der Beschreibung der Endsequenz, bis diese Sequenz zu Beginn einer neuen Zeile gesehen wird.[25]

Hier ist ein Beispiel in Perl:

drucken <<Endofheredoc; Es ist sehr schwer, eine Zeichenfolge mit "bestimmten Zeichen" zu codieren. Newlines, Kommas und andere Charaktere können Grenzkollisionen verursachen. Endofheredoc 

Dieser Code würde ausdrucken:

Es ist sehr schwer, eine Zeichenfolge mit "bestimmten Zeichen" zu codieren. Newlines, Kommas und andere Charaktere können Grenzkollisionen verursachen.

Durch die Verwendung einer speziellen Endsequenz sind alle Arten von Zeichen in der Zeichenfolge zulässig.

ASCII -Rüstung

Obwohl hauptsächlich als Mechanismus für die Textcodierung von Binärdaten verwendet,ASCII -Panzerung ist eine Programmier- und Systemverwaltungstechnik, die unter bestimmten Umständen auch dazu beiträgt, die Kollision zu vermeiden.[26][27] Diese Technik steht im Gegensatz zu den anderen oben beschriebenen Ansätzen, da sie komplizierter ist und daher nicht für kleine Anwendungen und einfache Datenspeicherformate geeignet ist. Die Technik verwendet ein spezielles Codierungsschema, wie z. Basis64, um sicherzustellen, dass ein Grenzwert oder andere bedeutende Zeichen nicht in übertragenen Daten angezeigt werden. Der Zweck ist es, mehrschichtige zu verhindern Flucht, d.h. für Anführungszeichen.

Diese Technik wird zum Beispiel in verwendet Microsoft's ASP.NET Webentwicklungstechnologie und ist eng mit der "ViewState" -Komponente dieses Systems verbunden.[28]

Beispiel

Das folgende vereinfachte Beispiel zeigt, wie diese Technik in der Praxis funktioniert.

Das erste Codefragment zeigt ein einfaches HTML -Tag in dem der ViewState -Wert Zeichen enthält, die mit den Abgrenzern des HTML -Tags selbst unvereinbar sind:

 Typ ="versteckt" Name ="__SICHTZUSTAND" Wert ="Booktitle: Nancy sagt nicht"Hallo Welt!" mehr." /> 

Dieses erste Codefragment ist nicht gut geformtund würde daher in einem "realen" eingesetzten System nicht richtig funktionieren.

Zum Speichern beliebiger Text in einem HTML -Attribut, HTML -Entitäten kann verwendet werden. In diesem Fall "& quot;" steht für die Doppelquote:

 Typ ="versteckt" Name ="__SICHTZUSTAND" Wert ="Booktitle: Nancy sagt nicht mehr" Hallo Welt! "." /> 

Alternativ könnte jede Codierung verwendet werden, die keine Zeichen enthalten, die im Kontext eine besondere Bedeutung haben, wie z. B. Base64:

 Typ ="versteckt" Name ="__SICHTZUSTAND" Wert ="QM9VA1RPDGXLOK5HBMN5IGRVZXNUJ3QGC2F5ICJIZWXSBYBXB3JSZCEIIGFUEW1VCMUU" /> 

Oder prozentualer Kodierung:

 Typ ="versteckt" Name ="__SICHTZUSTAND" Wert ="Booktitle: Nancy%20doesn%27T%20Say%20%22Hello%20World!%22%20anymore." /> 

Dies verhindert die Kollision des Grabens und stellt sicher, dass inkompatible Zeichen nicht im HTML -Code angezeigt werden, unabhängig davon, welche Zeichen im ursprünglichen (dekodierten) Text erscheinen.[28]

Siehe auch

Verweise

  1. ^ "Definition: Abgrenzer". Bundesstandard 1037C - Telekommunikation: Glossar der Telekommunikationsbedingungen. Archiviert vom Original am 2013-03-05. Abgerufen 2019-11-25.
  2. ^ "Was ist ein Trennzeichen?". www.computerhope.com. Abgerufen 2020-08-09.
  3. ^ Rohl, Jeffrey S. (1973). Programmierung in Forran. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-7190-0555-8. Beschreibung der Methode in Hollerith Notation unter der Fortran -Programmiersprache.
  4. ^ a b De Moor, Georges J. (1993). Fortschritte bei der Standardisierung in der Gesundheitsversorgung Informatik. IOS Press. ISBN 90-5199-114-2. p. 141
  5. ^ Friedl, Jeffrey E. F. (2002). Beherrschen reguläre Ausdrücke: leistungsstarke Techniken für Perl und andere Tools. O'Reilly. ISBN 0-596-00289-0. p. 319
  6. ^ Scott, Michael Lee (1999). Programmiersprache Pragmatik. Morgan Kaufmann. ISBN 1-55860-442-1.
  7. ^ a b c Wand, Larry; Orwant, Jon (Juli 2000). Programmierung perl (Dritter Aufl.). O'Reilly. ISBN 0-596-00027-8.
  8. ^ Kaufmann, Matt (2000). Computergestützte Argumentation: Ein Ansatz. Springer. ISBN 0-7923-7744-3.p. 3
  9. ^ Meyer, Mark (2005). Erkundungen in der Informatik. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-7637-3832-7. Referenzen C-Stil-Programmiersprachen mit lockigen Klammern und Semikolons.
  10. ^ Dilligan, Robert (1998). Berechnung im Webalter. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-306-45972-6.Beschreibt Syntax und Grenzwerte, die in HTML verwendet werden.
  11. ^ a b Schwartz, Randal (2005). Perl lernen. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-10105-3.Beschreibt String -Literale.
  12. ^ Watt, Andrew (2003). Sams lehrt sich in 10 Minuten XML. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-672-32471-0. Beschreibt die XML -Verarbeitungsanweisung. p. 21.
  13. ^ Cabrera, Harold (2002). C# für Java -Programmierer. Oxford Oxfordshire: Oxford University Press. ISBN 978-1-931836-54-8. Beschreibt Einzellinien- und Multi-Line-Kommentare. p. 72.
  14. ^ "Smarty Template -Dokumentation". Abgerufen 2010-03-12. Siehe z. B. Dokumentation des Smarty Template Systems, "Fluchtvorlage Abgrenzer".
  15. ^ "Der Satz von Kontrollzeichen für ISO 646" (PDF). Internationale Standardisierungsorganisation. 1. Dezember 1975.
  16. ^ "ASCII -Grafikzeichen Set" (PDF). Internationale Standardisierungsorganisation. 1. Dezember 1975.
  17. ^ Lewine, Donald (1991). POSIX -Programmierhandbuch. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-937175-73-6. Beschreibt die Verwendung von Kontroll-Z. p. 156,
  18. ^ Friedl, Jeffrey (2006). Reguläre Ausdrücke beherrschen. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-52812-6. Beschreibung von Lösungen für Embedded-Delimiter-Probleme p. 472.
  19. ^ Diskussion über ASCII Grenzterte Text gegen CSV und Registerkarte
  20. ^ Kahrel, Peter (2006). Automatisieren von InDesign mit regelmäßigen Ausdrücken. O'Reilly. p. 11. ISBN 0-596-52937-6.
  21. ^ Yukihiro, Matsumoto (2001). Rubin in den Punkt gebracht. O'Reilly. ISBN 0-596-00214-9. In Ruby sind diese als angegeben als Allgemeine abgrenzte Saiten. p. 11
  22. ^ Handbuch für Netzwerkprotokolle. Javvin Technologies Inc. 2005. ISBN 0-9740945-2-8. p. 26
  23. ^ Computerlinguistik und intelligente Textverarbeitung. Oxford Oxfordshire: Oxford University Press. 2001. ISBN 978-3-540-41687-6. Beschreibt Whitespace -Grenzwerte. p. 258.
  24. ^ Friedl, Jeffrey (2006). Reguläre Ausdrücke beherrschen. Oxford Oxfordshire: Oxford University Press. ISBN 978-0-596-52812-6. Seite 472.
  25. ^ Perl -Operatoren und Vorrang
  26. ^ Rhee, Man (2003). Internetsicherheit: Kryptografische Prinzipien, Algorithmen und Protokolle. John Wiley und Söhne. ISBN 0-470-85285-2.(Eine Beispielverwendung der ASCII -Panzerung in Verschlüsselungsanwendungen)
  27. ^ Gross, Christian (2005). Open Source für Windows -Administratoren. Charles River Media. ISBN 1-58450-347-5.(Eine Beispielverwendung der ASCII -Panzerung in Verschlüsselungsanwendungen)
  28. ^ a b Kalani, Amit (2004). Entwicklung und Implementierung von Webanwendungen mit visueller C#. Netz- und Visualstudio. NETZ. Que. ISBN 0-7897-2901-6.(Beschreibt die Verwendung von Base64 -Codierung und ViewState im HTML -Quellcode)

Externe Links