El conversor Markdown a HTML de FormatArc mostrando la diferencia entre símbolos escapados y sin escaparEl conversor Markdown a HTML de FormatArc mostrando la diferencia entre símbolos escapados y sin escapar
Publicado: 2026-07-15

Caracteres de escape en Markdown: lista completa y 22 ejemplos probados

Una línea que empieza con * se convierte en una viñeta. # lista de precios se vuelve un encabezado de página. El marcador <version> que escribiste desapareció de la vista previa. Todo esto ocurre porque Markdown interpretó tu símbolo como una instrucción de formato — y ninguno de estos casos produce un mensaje de error. Esta guía explica cómo escapar caracteres para que se muestren tal cual, respaldada por 22 casos de prueba ejecutados contra 4 renderizadores.

La respuesta corta — una barra invertida antes del símbolo

Escribe una barra invertida \ justo antes del carácter que quieres mostrar. Eso es todo.

\*esto no será cursiva\*

La barra invertida no aparece en el resultado. El ejemplo anterior se muestra como la cadena literal *esto no será cursiva*, asteriscos incluidos.

Para mostrar una barra invertida literal, duplícala: \\.

Tabla rápida — del síntoma a la solución

Parte de lo que salió mal para encontrar el símbolo culpable. Todos los síntomas provienen de los casos medidos más adelante.

Qué pasóCausaSolución
El texto quedó en cursiva o negritaPalabras entre * o _Escapar como \* \_
Una línea entera se volvió encabezadoLa línea empieza con # y un espacioEscribir \#
Apareció una lista numeradaLa línea empieza con número y puntoEscapar el punto: 1986\.
Apareció una lista con viñetasLa línea empieza con - o *Escribir \- \*
El texto desapareció de la páginaUna palabra entre < y >Escribir \< y \>
Una celda de tabla se partió o perdió su segunda mitadUna barra vertical dentro de la celdaBarra invertida antes de la barra vertical (detalles abajo)

Qué caracteres se pueden escapar

La especificación CommonMark sobre backslash escapesSe abre en una pestaña nueva establece que "Any ASCII punctuation character may be backslash-escaped" (cualquier signo de puntuación ASCII puede escaparse con barra invertida). Son estos 32 caracteres:

! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

Las dos caras opuestas de esta regla causan la mayoría de las confusiones:

  • Solo cuenta la puntuación ASCII. Ante cualquier otro carácter, la barra invertida es un carácter más: la especificación dice "Backslashes before other characters are treated as literal backslashes". Por eso \n no crea un salto de línea — se muestra como una barra invertida seguida de una n
  • El escape depende de la posición, no solo del carácter. # solo crea un encabezado al inicio de línea con un espacio después; un # en medio de una frase ya es seguro

La siguiente sección delimita esas fronteras con mediciones.

Probado — qué se rompe sin escapar, y si la barra invertida funciona

Hay muchas guías que listan los caracteres escapables. Muy pocas muestran qué pasa realmente cuando no escapas, o verifican que la barra invertida funcione en varias implementaciones. Por eso pasamos 22 casos por 4 renderizadores: el renderizador de producción de GitHub (vía su Markdown API), marked 18.0.5, remark-gfm 4.0.1 y CommonMark estricto (remark-parse sin extensiones). Medición del 2026-07-15; el script de reproducción y los datos crudos están en el repositorio del sitio, en scripts/benchmarks/markdown-escape-characters/.

Estos son los casos principales.

Entrada (cadena medida)Sin escaparCon escape
Buy the *limited edition* today.Se vuelve cursiva (4/4 renderizadores)\*limited edition\* se muestra tal cual (4/4)
# price list al inicio de líneaSe vuelve encabezado h1 (4/4)\# price list se muestra tal cual (4/4)
1986. What a year. al inicio de líneaSe vuelve lista numerada que empieza en 1986 (4/4)1986\. What a year. se muestra tal cual (4/4)
Replace <version> with 2.0<version> desaparece de la página (4/4)\<version\> permanece visible (4/4)
grep a | b dentro de una celda de tablaLa barra vertical parte la celda y el excedente se descarta (los 3 renderizadores GFM)Con barra invertida queda en una sola celda (los 3 GFM)

El caso de número más punto es el más fácil de pasar por alto. Sea 1. o 1986., un número seguido de punto al inicio de línea se convierte en lista numerada y el resto de la frase queda sangrado. Si abres una frase con un año o un número de modelo, escapa el punto.

Para ver cómo se interpreta tu Markdown, pégalo en Markdown a HTML — la conversión se ejecuta por completo en tu navegador y nada de lo que pegas se sube a ningún sitio.

El conversor Markdown a HTML de FormatArc mostrando la diferencia entre símbolos escapados y sin escaparEl conversor Markdown a HTML de FormatArc mostrando la diferencia entre símbolos escapados y sin escapar

Las cuatro implementaciones probadas son de la familia CommonMark y su comportamiento de escape coincidió por completo. Dónde divergen los dialectos es otro tema — consulta CommonMark vs GFM para esas mediciones.

Casos donde no hace falta escapar

Escapar de más hace que el código fuente sea más difícil de leer y ensucia los diffs. Tres patrones comunes resultaron seguros sin ningún escape:

  • Guiones bajos dentro de palabras. max_retry_count_limit se mostró tal cual en los 4 renderizadores — un _ dentro de una palabra no se trata como énfasis
  • #hashtag sin espacio. Un # solo crea encabezado cuando le sigue un espacio; #hashtag quedó como texto plano en los 4 renderizadores
  • Corchetes sin URL. [TODO] fix later se mostró tal cual en los 4 renderizadores. Una salvedad: si tu documento contiene una definición de referencia como [TODO]: https://..., los corchetes se convierten en enlace — escapa como \[TODO\] solo en ese caso

La asimetría a recordar: los asteriscos no se comportan como los guiones bajos. foo*bar*baz se volvió cursiva en los 4 renderizadores, aunque los asteriscos estén dentro de una palabra. No extiendas tu instinto de snake_case al *.

Dónde no funciona la barra invertida

La especificación CommonMark es explícita: "Backslash escapes do not work in code blocks, code spans, autolinks, or raw HTML" (los escapes no funcionan en bloques de código, code spans, autoenlaces ni HTML crudo). Nuestras pruebas lo confirman — un \* escrito dentro de un code span o un bloque de código mostró la barra invertida, en los 4 renderizadores.

Dos consecuencias prácticas:

  • Dentro de bloques de código, no escapes nada. * y # se muestran exactamente como los escribes
  • Intentar escapar dentro de código sale al revés. Escribe `\*` y tus lectores verán \*, no *

Hay una trampa más al final de la línea. Según la especificación, "A backslash at the end of the line is a hard line break" (una barra invertida al final de la línea es un salto de línea forzado) — y los 4 renderizadores convirtieron una \ final en <br>. Si querías escapar un símbolo al final de una línea y la barra invertida quedó última, obtienes un salto de línea extra en lugar de un símbolo.

Los caracteres que desaparecen — cuidado con < y >

La mayoría de los símbolos fallan hacia formato no deseado. < y > fallan hacia texto invisible, que es peor. Si escribes marcadores como <version>, este caso es para ti.

En nuestras pruebas, el <version> de Replace <version> with 2.0 desapareció de la página renderizada en los 4 renderizadores. El mecanismo varía: el sanitizador de GitHub elimina la etiqueta desconocida, mientras que marked y remark la pasan como HTML crudo que el navegador luego se traga. En ambos casos, tus lectores no ven nada.

Dos soluciones:

Replace \<version\> with 2.0
Replace `<version>` with 2.0

\<version\> permaneció visible en los 4 renderizadores. Si el marcador forma parte de un comando o código, un code span comunica mejor esa intención.

La única excepción contextual — barras verticales dentro de celdas de tabla

Todo lo anterior aplica en cualquier parte del documento. Las barras verticales dentro de celdas de tabla son el único lugar con reglas extra. Las tablas no son parte del núcleo de CommonMark — son una extensión de GFMSe abre en una pestaña nueva — y una barra vertical cruda dentro de una celda abre una columna nueva. Peor aún: la especificación GFM dice que las celdas que exceden el número de columnas del encabezado se ignoran ("the excess is ignored"). En nuestras pruebas, una celda con grep a | b se partió en la barra vertical y la b final se descartó en silencio (los 3 renderizadores GFM). Es el único fallo de escape que pierde datos en lugar de solo cambiar el formato.

Escapa las barras verticales con barra invertida, o usa la referencia de carácter HTML &#124;. Ambas mantuvieron la barra vertical dentro de una sola celda en los 3 renderizadores GFM.

| command |
| --- |
| grep a \| b |
| grep a &#124; b |

Si tu tabla viene de datos CSV o de una hoja de cálculo, CSV a Markdown escapa automáticamente las barras verticales de las celdas al generar la tabla — sin revisión manual celda por celda, y la conversión nunca sale de tu navegador.

Prefiere un code span cuando el símbolo es código

Envolver texto en acentos graves también muestra los símbolos literalmente, pero las dos técnicas sirven para cosas distintas:

  • Usa barra invertida cuando el símbolo pertenece a la prosa. Los precios pueden cambiar \*sin aviso\* mantiene la frase con aspecto de frase, símbolos incluidos
  • Usa un code span cuando el texto es un comando, una ruta o una regex. C:\Users\nombre y \d+ se leen mejor en monoespaciada, y el estilo indica al lector que es código

Como el procesamiento de escapes está desactivado dentro de los code spans, una regex como \d+ puede escribirse tal cual. Para saber cómo se maneja el escape al convertir HTML existente o texto enriquecido a Markdown, consulta la guía de HTML a Markdown.

Preguntas frecuentes

¿Qué caracteres se pueden escapar en Markdown?

Los 32 signos de puntuación ASCII (especificación CommonMarkSe abre en una pestaña nueva). Una barra invertida antes de una letra, un dígito o un carácter no ASCII no es un escape — se muestra como barra invertida literal.

Escribí \n pero no hay salto de línea

\n es una notación de lenguajes de programación, no un escape de Markdown. Una barra invertida antes de una letra se muestra literal (confirmado en los 4 renderizadores). Para saltar de línea en Markdown, deja una línea en blanco para un párrafo nuevo, o termina la línea con una barra invertida para un salto forzado.

¿Los guiones bajos de snake_case necesitan escape?

No. El _ dentro de una palabra no se trató como énfasis en ninguno de los 4 renderizadores. Los asteriscos son la excepción: foo*bar*baz se vuelve cursiva incluso dentro de una palabra.

¿Cómo escapo una barra vertical dentro de una celda de tabla?

Pon una barra invertida antes de la barra vertical, o usa la referencia de carácter &#124;. Ambas funcionaron en los 3 renderizadores GFM probados. Si generas tablas desde CSV, CSV a Markdown las escapa por ti.

¿Cómo muestro una barra invertida o un asterisco dentro de un bloque de código?

No hagas nada. El procesamiento de escapes no aplica dentro de bloques de código ni code spans, así que * y \ se muestran exactamente como los escribes. Escribir \* ahí mostraría también la barra invertida.

Resumen

  • La regla base: una barra invertida justo antes del símbolo. Cubre los 32 signos de puntuación ASCII y nada más
  • snake_case, #hashtag y los corchetes sin enlace no necesitan escape — escapar de más solo ensucia el código fuente
  • Los escapes no funcionan dentro de bloques de código ni code spans, y una barra invertida al final de línea se convierte en salto forzado
  • < > fallan haciendo invisible el texto, y las barras verticales en celdas fallan perdiendo datos — arregla esos dos primero

Para comprobar cómo se renderiza tu Markdown, pégalo en Markdown a HTML — gratis, sin registro, y nada de lo que pegas sale de tu navegador.