Delimitador

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar
Una descripción estilística de los valores dentro de un archivo de texto de valores separados por coma (CSV). Las comas (muestras en rojo) se utilizan como delimitadores de campo.

Un delimitador es una secuencia de uno o más caracteres para especificar el límite entre regiones separadas e independientes en texto sin formato, expresiones matemáticas u otros flujos de datos. Un ejemplo de delimitador es el carácter de coma, que actúa como delimitador de campo en una secuencia de valores separados por comas. Otro ejemplo de delimitador es el intervalo de tiempo utilizado para separar letras y palabras en la transmisión del código Morse.

En matemáticas, los delimitadores se utilizan a menudo para especificar el alcance de una operación, y puede ocurrir tanto como símbolos aislados (por ejemplo, colon en "") y como un par de símbolos de apariencia opuesta (por ejemplo, corchetes en ángulo ).

Los delimitadores representan uno de los diferentes medios de especificar los límites en una secuencia de datos. La notación declarativa, por ejemplo, es un método alternativo que utiliza un campo de longitud al inicio de una secuencia de datos para especificar el número de caracteres que contiene la secuencia de datos.

Descripción general

Los delimitadores pueden caracterizarse como delimitadores de campos y registros, o como delimitadores de corchetes.

Delimitadores de campos y registros

Los delimitadores de campo separan los campos de datos. Los delimitadores de registros separan grupos de campos.

Por ejemplo, el formato CSV utiliza una coma como delimitador entre campos y un indicador de fin de línea como delimitador entre registros:

fname,lname,age,salary
nancy, Davolio,33,$30000
erin,borakova,28,$25250
tony, Rafael,35,$28700

Esto especifica una simple tabla de bases de datos de archivos planos usando el formato de archivo CSV.

Delimitadores de corchetes

Los delimitadores de corchetes, también llamados delimitadores de bloque, delimitadores de región o delimitadores equilibrados, marcan tanto el inicio como el final de una región de texto.

Ejemplos comunes de delimitadores de corchetes incluyen:

Delimitadores Descripción
( )Parentheses. La sintaxis del lenguaje de programación Lisp se cita como reconocible principalmente por su uso de paréntesis.
{ }Brazos (también llamados corchetes curly).
[ ]Brackets (comúnmente utilizado para denotar un subscript).
< >Entre corchetes en ángulo.
" "comúnmente utilizado para denotar literales de cadena.
' 'comúnmente utilizado para denotar caracteres literales.
?>utilizado para indicar instrucciones de procesamiento XML.
/* */utilizado para denotar comentarios en algunos idiomas de programación.
<% %>utilizado en algunas plantillas web para especificar límites de lenguaje.

Convenciones

Históricamente, las plataformas informáticas han utilizado ciertos delimitadores por convención. Las siguientes tablas muestran algunos ejemplos para comparar.

Lenguajes de programación (Ver también, Comparación de lenguajes de programación (sintaxis)).

String LiteralFin de la declaración
Pascal singlequotesemicolon
Python doble ", singlequotefinal of line (EOL)

Delimitadores de campos y registros (Ver también, ASCII, Carácter de control).

Fin del campoFin del RegistroFin de archivo
Sistemas similares a seis, incluyendo macOS, AmigaOS TabLFninguno
Windows, MS-DOS, OS/2, CP/M TabCRLFninguno (excepto en CP/M), Control-Z
Mac OS clásico, Apple DOS, ProDOS, GS/OS TabCRninguno
ASCII/Unicode UNIT SEPARATOR
Posición 31 (U+001F)
RECORD SEPARATOR
Posición 30 (U+001E)
FILE SEPARATOR
Posición 28 (U+001C)

Colisión de delimitadores

La

colisión de delimitadores es un problema que ocurre cuando un autor o programador introduce delimitadores en el texto sin la intención de que se interpreten como límites entre regiones separadas. En el caso de XML, por ejemplo, esto puede ocurrir cada vez que un autor intenta especificar un carácter entre corchetes angulares.

En la mayoría de los tipos de archivos hay un delimitador de campo y un delimitador de registro, los cuales están sujetos a colisión. En el caso de archivos de valores separados por comas, por ejemplo, la colisión de campos puede ocurrir cada vez que un autor intenta incluir una coma como parte de un valor de campo (por ejemplo, salario = "$30,000") y un delimitador de registro. La colisión se produciría siempre que un campo contuviera varias líneas. Tanto la colisión de delimitadores de registros como de campos se producen con frecuencia en archivos de texto.

En algunos contextos, un usuario o atacante malintencionado puede intentar aprovechar este problema intencionadamente. En consecuencia, la colisión de delimitadores puede ser la fuente de vulnerabilidades y exploits de seguridad. Los usuarios malintencionados pueden aprovechar la colisión de delimitadores en lenguajes como SQL y HTML para implementar ataques tan conocidos como inyección SQL y secuencias de comandos entre sitios, respectivamente.

Soluciones

Dado que la colisión de delimitadores es un problema muy común, se han inventado varios métodos para evitarla. Algunos autores pueden intentar evitar el problema eligiendo un carácter delimitador (o una secuencia de caracteres) que probablemente no aparezca en el flujo de datos. Este enfoque ad hoc puede ser adecuado, pero depende necesariamente de una suposición correcta de lo que aparecerá en el flujo de datos y no ofrece seguridad contra colisiones maliciosas. Por lo tanto, también se aplican otras convenciones más formales.

Texto delimitado ASCII

Los juegos de caracteres ASCII y Unicode se diseñaron para resolver este problema proporcionando caracteres no imprimibles que se pueden utilizar como delimitadores. Estos son el rango de ASCII 28 a 31.

ASCII Dec Signatura Nombre Unicode Nombre común Usage
28 INFORMACIÓN SEPARATOR FOUR separador de archivos Fin del archivo. O entre una concatenación de lo que de otro modo podría ser archivos separados.
29 SEPARATOR DE INFORMACIÓN separador de grupo Entre secciones de datos. No se necesita en archivos de datos simples.
30 INFORMACIÓN SEPARATOR TWO separador de registros Fin de un registro o fila.
31 SEPARATOR DE INFORMACIÓN ONE separador de unidad Entre campos de un registro, o miembros de una fila.

El uso del separador de unidades ASCII 31 como separador de campos y del separador de registros ASCII 30 resuelve el problema de los delimitadores de campos y registros que aparecen en un flujo de datos de texto.

Personaje de escape

Un método para evitar la colisión de delimitadores es utilizar caracteres de escape. Desde el punto de vista del diseño del lenguaje, son adecuados, pero tienen desventajas:

  • el texto puede ser no legible cuando se ilumina con numerosos caracteres de escape, un problema llamado síndrome de palillo de dientes inclinado (debido al uso de para escapar / en Perl expresiones regulares, dando lugar a secuencias como "//");
  • el texto se hace difícil de analizar mediante la expresión regular
  • requieren un mecanismo para "escapar los escapes" cuando no se pretende como personajes de escape; y
  • Aunque es fácil de escribir, pueden ser crípticos para alguien que no está familiarizado con el idioma.
  • no protegen contra ataques de inyección

Secuencia de escape

Las secuencias de escape son similares a los caracteres de escape, excepto que generalmente consisten en algún tipo de mnemónico en lugar de un solo carácter. Un uso es en cadenas literales que incluyen un carácter de comillas dobles ("). Por ejemplo en Perl, el código:

impresión "Nancy dijo x22Hello World!x22 a la multitud."; #### use x22

produce el mismo resultado que:

impresión "Nancy dijo "Hola Mundo!" a la multitud."; #### use escape char

Un inconveniente de las secuencias de escape, cuando las usan personas, es la necesidad de memorizar los códigos que representan caracteres individuales (ver también: referencia de entidad de carácter, referencia de carácter numérico).

Delimitadores de cotización dual

A diferencia de las secuencias de escape y los caracteres de escape, los delimitadores duales proporcionan otra forma de evitar la colisión de delimitadores. Algunos lenguajes, por ejemplo, permiten el uso de comillas simples (') o dobles (") para especificar una cadena literal. Por ejemplo, en Perl:

impresión Nancy dijo "¡Hola Mundo!" a la multitud. ';

produce el resultado deseado sin necesidad de escapes. Sin embargo, este enfoque solo funciona cuando la cadena no contiene ambos tipos de comillas.

Delimitadores de comillas de relleno

A diferencia de las secuencias de escape y los caracteres de escape, los delimitadores de relleno proporcionan otra forma de evitar la colisión de delimitadores. Visual Basic, por ejemplo, utiliza comillas dobles como delimitadores. Esto es similar a escapar del delimitador.

impresión "Nancy dijo "¡Hola Mundo!" a la multitud.

produce el resultado deseado sin necesidad de escapes. Sin embargo, al igual que el escape normal, puede resultar confuso cuando se utilizan muchas comillas. El código para imprimir el código fuente anterior parecería más confuso:

impresión "print ""Nancy dijo """" "Hola Mundo""" a la multitud.""

Delimitadores de cotización alternativos configurables

A diferencia de los delimitadores duales, los delimitadores múltiples son aún más flexibles para evitar la colisión de delimitadores.

Por ejemplo, en Perl:

impresión qq^Nancy ya no quiere decir "¡Hola Mundo!".;impresión qq@Nancy no quiere decir "Hola Mundo!" más.@;impresión qq(Nancy ya no quiere decir "¡Hola Mundo!").;

todos producen el resultado deseado mediante el uso de operadores de comillas, que permiten que cualquier carácter conveniente actúe como delimitador. Aunque este método es más flexible, pocos idiomas lo admiten. Perl y Ruby son dos que sí lo hacen.

Límite de contenido

Un límite de contenido es un tipo especial de delimitador que está diseñado específicamente para resistir la colisión de delimitadores. Funciona permitiendo al autor especificar una secuencia de caracteres que garantiza que siempre indicará un límite entre partes en un mensaje de varias partes, sin otra interpretación posible.

El delimitador se genera frecuentemente a partir de una secuencia aleatoria de caracteres que es estadísticamente improbable que ocurra en el contenido. Esto puede ir seguido de una marca de identificación como un UUID, una marca de tiempo o alguna otra marca distintiva. Alternativamente, se puede escanear el contenido para garantizar que no aparezca un delimitador en el texto. Esto puede permitir que el delimitador sea más corto o más simple y aumentar la legibilidad humana del documento. (Ver por ejemplo, MIME, Aquí documentos).

Espacio en blanco o sangría

Algunos lenguajes informáticos y de programación permiten el uso de delimitadores de espacios en blanco o sangrías como medio para especificar límites entre regiones independientes en el texto.

Sintaxis de expresiones regulares

Al especificar una expresión regular, también se pueden utilizar delimitadores alternativos para simplificar la sintaxis de las operaciones de coincidencia y sustitución en Perl.

Por ejemplo, se puede especificar una operación de coincidencia simple en Perl con la siguiente sintaxis:

$string1 = Nancy dijo "¡Hola Mundo!" a la multitud. '; # especificar una cadena de destinoimpresión $string1 = m/[aeiou]+/; # match one or more vocales

La sintaxis es lo suficientemente flexible como para especificar operaciones de coincidencia con delimitadores alternativos, lo que facilita evitar la colisión de delimitadores:

$string1 = 'Nancy dijo que "http://Hello/World.htm" no es una dirección válida. '; # target string impresión $string1 = m@http://@; # match using alternative regular expression delimiterimpresión $string1 = m{http://}; # igual que anterior, pero diferente delimitadorimpresión $string1 = ¡M! http://!; Igual que antes, pero diferente delimitador.

Aquí documento

Un documento Here permite la inclusión de contenido arbitrario al describir una secuencia final especial. Muchos lenguajes admiten esto, incluidos PHP, scripts bash, Ruby y Perl. Un documento aquí comienza describiendo cuál será la secuencia final y continúa hasta que esa secuencia se ve al comienzo de una nueva línea.

Aquí hay un ejemplo en Perl:

impresión ..ENDOFHEREDOC;Es muy difícil codificar una cadena con "certain characters".Newlines, comas y otros personajes pueden causar colisiones de delimitadores.ENDOFHEREDOC

Este código imprimiría:

Es muy difícil codificar una cadena con "certain characters".

Newlines, comas y otros personajes pueden causar colisiones de delimitadores.

Al utilizar una secuencia final especial, se permiten todo tipo de caracteres en la cadena.

Armadura ASCII

Aunque se utiliza principalmente como mecanismo para la codificación de texto de datos binarios, El blindaje ASCII es una técnica de programación y administración de sistemas que también ayuda a evitar la colisión de delimitadores en algunas circunstancias. Esta técnica se diferencia de los otros enfoques descritos anteriormente porque es más complicada y, por lo tanto, no es adecuada para aplicaciones pequeñas y formatos de almacenamiento de datos simples. La técnica emplea un esquema de codificación especial, como base64, para garantizar que el delimitador u otros caracteres significativos no aparezcan en los datos transmitidos. El propósito es evitar el escape de varias capas, es decir, para comillas dobles.

Esta técnica se utiliza, por ejemplo, en la tecnología de desarrollo web ASP.NET de Microsoft y está estrechamente asociada con el método "VIEWSTATE" componente de ese sistema.

Ejemplo

El siguiente ejemplo simplificado demuestra cómo funciona esta técnica en la práctica.

El primer fragmento de código muestra una etiqueta HTML simple en la que el valor VIEWSTATE contiene caracteres que son incompatibles con los delimitadores de la propia etiqueta HTML:

Identificación Tipo="hidden" nombre="___VIEWSTATE" valor="LibroTítulo: La naturaleza no dice "Hola. ¡El mundo!" más." /

Este primer fragmento de código no está bien formado y, por lo tanto, no funcionaría correctamente en un entorno de "mundo real". sistema implementado.

Para almacenar texto arbitrario en un atributo HTML, se pueden utilizar entidades HTML. En este caso "&quot;" sustituye a las comillas dobles:

Identificación Tipo="hidden" nombre="___VIEWSTATE" valor="LibroTítulo: La naturaleza ya no dice: ¡Hola Mundo! /

Como alternativa, se podría utilizar cualquier codificación que no incluya caracteres que tengan un significado especial en el contexto, como base64:

Identificación Tipo="hidden" nombre="___VIEWSTATE" valor="Qm9va1RpdGxlOk5hbmN5IGRvZXNuJ3Qgc2F5ICJIZWxsbyBXb3JsZCEiIGFueW1vcmUu" /

O codificación porcentual:

Identificación Tipo="hidden" nombre="___VIEWSTATE" valor="LibroTitle:Nancy%20doesn%27t%20say%20%22Hola%20World!%22%20anymore." /

Esto evita la colisión de delimitadores y garantiza que no aparecerán caracteres incompatibles dentro del código HTML, independientemente de qué caracteres aparezcan en el texto original (decodificado).

Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save