Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Символы, определяющие границу между областями в потоке данных.
Characters that specify the boundary between regions in a data stream
Разделитель — это последовательность из одного или нескольких символов, используемая для обозначения границы между отдельными, независимыми областями в обычном тексте, математических выражениях или других потоках данных. Примером разделителя является символ запятой, который выступает в качестве разделителя полей в последовательности значений, разделенных запятыми. Другим примером разделителя является временной интервал, используемый для разделения букв и слов при передаче кода Морзе. В математике разделители часто используются для указания области действия операции и могут встречаться как в виде отдельных символов (например, двоеточие в "") так и в виде пар символов, зеркально отражающих друг друга (например, угловые скобки в ). Разделители представляют собой один из способов определения границ в потоке данных. Декларативное обозначение, например, является альтернативным методом (не использующим разделители), который применяет поле длины в начале потока данных для указания количества символов, содержащихся в этом потоке данных.
A delimiter is a sequence of one or more characters for specifying the boundary between separate, independent regions in plain text, mathematical expressions or other data streams. An example of a delimiter is the comma character, which acts as a field delimiter in a sequence of comma separated values. Another example of a delimiter is the time gap used to separate letters and words in the transmission of Morse code. In mathematics, delimiters are often used to specify the scope of an operation, and can occur both as isolated symbols (e. g., colon in "") and as a pair of opposing looking symbols (e. g., angled brackets in ). Delimiters represent one of various means of specifying boundaries in a data stream. Declarative notation, for example, is an alternate method (without the use of delimiters) that uses a length field at the start of a data stream to specify the number of characters that the data stream contains.
Обзор
Делимитеры могут быть представлены как разделители полей и записей, или как разделители в скобках.
Delimiters may be characterized as field and record delimiters, or as bracket delimiters.
Столкновение с ограничителем
Столкновение разделителей — это проблема, возникающая, когда автор или программист вводит разделители в текст, не предполагая, что они будут интерпретированы как границы между отдельными областями. Например, в случае XML это может произойти, когда автор пытается ввести символ угловой скобки. В большинстве типов файлов существуют как разделитель полей, так и разделитель записей, оба из которых подвержены столкновению. Например, в файлах со значениями, разделёнными запятыми, столкновение полей может произойти, когда автор пытается включить запятую в значение поля (например, зарплата = "$30,000"), а столкновение разделителей записей — когда поле содержит несколько строк. Столкновение разделителей полей и записей часто встречается в текстовых файлах. В некоторых случаях злоумышленник может намеренно использовать эту проблему. Следовательно, столкновение разделителей может быть источником уязвимостей и эксплойтов безопасности. Злоумышленники могут использовать столкновение разделителей в таких языках, как SQL и HTML, для осуществления известных атак, таких как SQL-инъекция и межсайтовый скриптинг соответственно.
Delimiter collision is a problem that occurs when an author or programmer introduces delimiters into text without actually intending them to be interpreted as boundaries between separate regions. In the case of XML, for example, this can occur whenever an author attempts to specify an angle bracket character. In most file types there is both a field delimiter and a record delimiter, both of which are subject to collision. In the case of comma separated values files, for example, field collision can occur whenever an author attempts to include a comma as part of a field value (e. g., salary = "$30,000"), and record delimiter collision would occur whenever a field contained multiple lines. Both record and field delimiter collision occur frequently in text files. In some contexts, a malicious user or attacker may seek to exploit this problem intentionally. Consequently, delimiter collision can be the source of security vulnerabilities and exploits. Malicious users can take advantage of delimiter collision in languages such as SQL and HTML to deploy such well known attacks as SQL injection and cross site scripting, respectively.
Решение
Поскольку столкновение разделителей — очень распространенная проблема, были изобретены различные методы её предотвращения. Некоторые авторы могут попытаться избежать этой проблемы, выбирая символ (или последовательность символов) в качестве разделителя, который вряд ли встретится в самом потоке данных. Такой подход может быть приемлемым, но он неизбежно зависит от верного предположения о содержимом потока данных и не обеспечивает защиты от преднамеренных столкновений. Поэтому применяются и другие, более формализованные соглашения.
Because delimiter collision is a very common problem, various methods for avoiding it have been invented. Some authors may attempt to avoid the problem by choosing a delimiter character (or sequence of characters) that is not likely to appear in the data stream itself. This ad hoc approach may be suitable, but it necessarily depends on a correct guess of what will appear in the data stream, and offers no security against malicious collisions. Other, more formal conventions are therefore applied as well.
Текст с разграничением по ASCII
Набор символов ASCII и Unicode был разработан для решения этой проблемы путем предоставления непечатаемых символов, которые могут использоваться в качестве разделителей. Это диапазон от 28 до 31 в ASCII. ASCII Dec Символ Название Unicode Общее название Использование 28 INFORMATION SEPARATOR FOUR файловый разделитель Конец файла. Или между объединением файлов, которые в противном случае могли бы быть отдельными. 29 INFORMATION SEPARATOR THREE групповой разделитель Между разделами данных. Не требуется в простых файлах данных. 30 INFORMATION SEPARATOR TWO разделитель записи Конец записи или строки. 31 INFORMATION SEPARATOR ONE разделитель единиц Между полями записи или элементами строки. Использование разделителя единиц ASCII 31 и разделителя записей ASCII 30 решает проблему разграничения полей и записей, которые встречаются в потоке текстовых данных.
The ASCII and Unicode character sets were designed to solve this problem by the provision of non printing characters that can be used as delimiters. These are the range from ASCII 28 to 31. ASCII Dec Symbol Unicode Name Common Name Usage 28 INFORMATION SEPARATOR FOUR file separator End of file. Or between a concatenation of what might otherwise be separate files. 29 INFORMATION SEPARATOR THREE group separator Between sections of data. Not needed in simple data files. 30 INFORMATION SEPARATOR TWO record separator End of a record or row. 31 INFORMATION SEPARATOR ONE unit separator Between fields of a record, or members of a row. The use of ASCII 31 Unit separator as a field separator and ASCII 30 Record separator solves the problem of both field and record delimiters that appear in a text data stream.
Двойные делиттеры котировок
В отличие от экранирующих последовательностей и экранирующих символов, двойные ограничители предоставляют еще один способ избежать конфликта ограничителей. Некоторые языки, например, позволяют использовать либо одинарную кавычку (') или двойную кавычку (") для определения строкового литерала. Например, в Perl:
In contrast to escape sequences and escape characters, dual delimiters provide yet another way to avoid delimiter collision. Some languages, for example, allow the use of either a single quote (') or a double quote (") to specify a string literal. For example, in Perl:
print 'Нэнси сказала "Привет, мир!" толпе.';
print 'Nancy said "Hello World!" to the crowd. ';
выводит ожидаемый результат без необходимости использования экранирования. Однако этот подход работает только в том случае, если строка не содержит оба типа кавычек.
produces the desired output without requiring escapes. This approach, however, only works when the string does not contain both types of quotation marks.
В отличие от двойных разделителей, множественные разделители ещё более гибки в плане предотвращения конфликта разделителей.
In contrast to dual delimiters, multiple delimiters are even more flexible for avoiding delimiter collision.
Граница содержания
Контентная граница — это специальный тип разделителя, разработанный для предотвращения коллизий разделителей. Она позволяет автору указать последовательность символов, которая гарантированно всегда обозначает границу между частями многокомпонентного сообщения, исключая любую другую интерпретацию. Разделитель часто генерируется из случайной последовательности символов, статистическая вероятность появления которой в содержимом крайне мала. За ней может следовать идентификатор, такой как UUID, временная метка или другой уникальный маркер. Альтернативно, содержимое может быть просканировано для гарантии отсутствия разделителя в тексте. Это может позволить использовать более короткий или простой разделитель и повысить удобочитаемость документа. (См., например, MIME, Here-документы).
A content boundary is a special type of delimiter that is specifically designed to resist delimiter collision. It works by allowing the author to specify a sequence of characters that is guaranteed to always indicate a boundary between parts in a multi part message, with no other possible interpretation. The delimiter is frequently generated from a random sequence of characters that is statistically improbable to occur in the content. This may be followed by an identifying mark such as a UUID, a timestamp, or some other distinguishing mark. Alternatively, the content may be scanned to guarantee that a delimiter does not appear in the text. This may allow the delimiter to be shorter or simpler, and increase the human readability of the document. (See e. g., MIME, Here documents).
Белое пространство или вмятина
Некоторые языки программирования и компьютерные языки позволяют использовать пробелы или отступы для определения границ между независимыми блоками текста.
Some programming and computer languages allow the use of whitespace delimiters or indentation as a means of specifying boundaries between independent regions in text.