Convertidor de Markdown a HTML

Compile Markdown en HTML semántico o convierta HTML en Markdown en tiempo real. Compatibilidad exhaustiva con CommonMark, GitHub Flavored Markdown (GFM), resaltado de sintaxis y desinfección XSS.

Código Markdown de entrada
Código HTML compilado
<h1 id="convertidor-de-markdown-a-html">Convertidor de Markdown a HTML</h1>
<p>Le damos la bienvenida al <strong>convertidor en tiempo real de Markdown a
    HTML</strong>. Esta herramienta implementa la especificación completa de
  GitHub Flavored Markdown (GFM) y conversión bidireccional.</p>
<h2 id="caracter-sticas-principales">Características principales</h2>
<ul>
  <li><strong>Extensión GFM</strong>: Tablas de datos, listas de tareas y texto
    tachado</li>
  <li><strong>Resaltado de sintaxis</strong>: Integración con highlight.js para
    decenas de lenguajes</li>
  <li><strong>Protección contra XSS</strong>: Desinfección estricta de scripts
    maliciosos con DOMPurify</li>
  <li><strong>Extracción de Frontmatter</strong>: Detección y filtrado
    automático de metadatos YAML</li>
</ul>
<h2 id="ejemplo-de-c-digo">Ejemplo de código</h2>
<pre
  style="background-color: #f6f8fa; border: 1px solid #e2e8f0; border-radius: 0.375rem; padding: 1em; margin: 1em 0; overflow-x: auto;"><code class="hljs language-javascript" style="background: transparent; padding: 0; display: block;"><span class="hljs-comment">// Configuración dinámica del compilador y políticas de seguridad</span>
<span class="hljs-keyword">function</span> <span class="hljs-title function_">compileMarkdown</span>(<span class="hljs-params">sourceCode, options = {}</span>) {
  <span class="hljs-keyword">const</span> compiler = <span class="hljs-keyword">new</span> <span class="hljs-title class_">MarkdownCompiler</span>({
    <span class="hljs-attr">gfm</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">breaks</span>: <span class="hljs-literal">true</span>,
    <span class="hljs-attr">sanitize</span>: options.<span class="hljs-property">sanitize</span> ?? <span class="hljs-literal">true</span>,
  });
  <span class="hljs-keyword">return</span> compiler.<span class="hljs-title function_">render</span>(sourceCode);
}

<span class="hljs-keyword">const</span> html = <span class="hljs-title function_">compileMarkdown</span>(<span class="hljs-string">&#x27;# Prueba de renderizado en vivo&#x27;</span>);
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(html);</code></pre>
<blockquote>
  <p>&quot;Una documentación estructurada es la base del software de alta
    calidad. Markdown equilibra eficiencia de redacción y claridad.&quot;</p>
</blockquote>
<h2 id="tabla-de-correspondencias">Tabla de correspondencias</h2>
<table>
  <thead>
    <tr>
      <th align="left">Módulo</th>
      <th align="left">Estándar técnico</th>
      <th align="center">Estado</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td align="left">Tipografía y párrafos</td>
      <td align="left">Especificación CommonMark</td>
      <td align="center">Activo</td>
    </tr>
    <tr>
      <td align="left">Tablas y alineación</td>
      <td align="left">Protocolo extendido GFM</td>
      <td align="center">Activo</td>
    </tr>
    <tr>
      <td align="left">Motor de sintaxis</td>
      <td align="left">highlight.js</td>
      <td align="center">Activo</td>
    </tr>
  </tbody>
</table>
<h2 id="tareas-pendientes">Tareas pendientes</h2>
<ul>
  <li><input checked="" disabled="" type="checkbox"> Procesar tablas GFM y
    casillas interactivas</li>
  <li><input checked="" disabled="" type="checkbox"> Generar identificadores ID
    para enlaces de anclaje</li>
  <li><input disabled="" type="checkbox"> Exportar plantilla HTML5 autónoma con
    estilos embebidos</li>
</ul>
Vista previa

Convertidor de Markdown a HTML

Le damos la bienvenida al convertidor en tiempo real de Markdown a HTML. Esta herramienta implementa la especificación completa de GitHub Flavored Markdown (GFM) y conversión bidireccional.

Características principales

  • Extensión GFM: Tablas de datos, listas de tareas y texto tachado
  • Resaltado de sintaxis: Integración con highlight.js para decenas de lenguajes
  • Protección contra XSS: Desinfección estricta de scripts maliciosos con DOMPurify
  • Extracción de Frontmatter: Detección y filtrado automático de metadatos YAML

Ejemplo de código

// Configuración dinámica del compilador y políticas de seguridad
function compileMarkdown(sourceCode, options = {}) {
  const compiler = new MarkdownCompiler({
    gfm: true,
    breaks: true,
    sanitize: options.sanitize ?? true,
  });
  return compiler.render(sourceCode);
}

const html = compileMarkdown('# Prueba de renderizado en vivo');
console.log(html);

"Una documentación estructurada es la base del software de alta calidad. Markdown equilibra eficiencia de redacción y claridad."

Tabla de correspondencias

Módulo Estándar técnico Estado
Tipografía y párrafos Especificación CommonMark Activo
Tablas y alineación Protocolo extendido GFM Activo
Motor de sintaxis highlight.js Activo

Tareas pendientes

  • Procesar tablas GFM y casillas interactivas
  • Generar identificadores ID para enlaces de anclaje
  • Exportar plantilla HTML5 autónoma con estilos embebidos

El Flujo de Compilación de Markdown a HTML: De Cadenas de Texto a AST Semántico

La transformación de Markdown a HTML es un procedimiento multifase de procesamiento de cadenas que traduce marcado en texto plano a un Árbol de Sintaxis Abstracta (AST, por sus siglas en inglés) estandarizado antes de serializarlo en elementos HTML5 semánticos. Frente a sustituciones superficiales mediante expresiones regulares, un compilador basado en AST garantiza un comportamiento determinista a través de fases estructuradas:

1. Tokenización Léxica (Lexing / Scanning): La cadena de caracteres UTF-8 se escanea de forma secuencial para delimitar fronteras de elementos a nivel de bloque (encabezados, cercas de código, citas, elementos de lista y filas de tabla) frente a delimitadores en línea (énfasis, hipervínculos, código en línea y autovínculos).

2. Construcción del Árbol de Sintaxis Abstracta (AST): Los tokens identificados se estructuran en una jerarquía formal de nodos que representa la lógica documental. Este modelo estructural previene el retroceso catastrófico (catastrophic backtracking), aísla citas anidadas dentro de listas y garantiza el emparejamiento simétrico de delimitadores tipográficos.

3. Transformación de Nodos y Extensiones: El compilador recorre el árbol sintáctico para aplicar transformaciones personalizadas, tales como la derivación de identificadores de anclaje (slugs) en encabezados, el etiquetado de bloques de código según gramáticas de lenguajes o la supresión de bloques YAML frontmatter.

4. Serialización y Escape de Entidades HTML5: El árbol de nodos final se serializa en marcado HTML5 conforme a las directivas de seguridad, escapando caracteres reservados de entidad (&, <, >) para preservar la integridad estructural del documento.

Especificaciones de Markdown: Núcleo CommonMark frente a GitHub Flavored Markdown (GFM)

La especificación original ideada por John Gruber en 2004 carecía de definiciones rigurosas para numerosos casos límite sintácticos, lo que propició discrepancias de visualización entre analizadores. Los entornos de desarrollo contemporáneos se rigen por dos especificaciones formales de referencia:

Constructo SintácticoNúcleo CommonMarkExtensión GFMElemento HTML ResultanteComportamiento Técnico y Semántica
Tablas con barras verticalesNo admitido| Col 1 | Col 2 |<table><thead><tbody>Genera estructuras tabulares con alineación de columnas deducida de la posición de dos puntos (:---, :---:, ---:).
Listas de tareas (Task Lists)Elementos de lista estándar- [ ] y - [x]<input type="checkbox" disabled>Convierte listas de control en casillas de verificación semánticas de solo lectura para el seguimiento de tareas operativas.
Texto tachado (Strikethrough)No admitido~~eliminado~~<del>eliminado</del>Representa texto corregido, descartado o sustituido empleando la etiqueta semántica de supresión documental.
Autovínculos extendidosRequiere corchetes angulares <https://...>https://ejemplo.com<a href="...">Detecta e hipervincula URLs directas, dominios de internet y direcciones de correo sin sintaxis explícita.
Bloques cercados (Fenced Code)Triple acento grave o tildes```typescript<pre><code class="language-*">Extrae la cadena informativa de lenguaje para alimentar motores de análisis sintáctico y temas cromáticos.

Arquitectura de Seguridad: Mitigación de Vulnerabilidades Cross-Site Scripting (XSS)

Por diseño normativo, Markdown admite etiquetas HTML nativas para que los redactores implementen disposiciones visuales que exceden la sintaxis básica. Sin embargo, esta permisividad introduce vectores de ataque de inyección de secuencias de comandos en sitios cruzados (XSS) de gravedad crítica cuando se procesa contenido generado por usuarios no autenticados o externos:

Vectores de Ataque en Markdown no Sanitizado: Cargas útiles maliciosas pueden camuflarse como fragmentos HTML válidos, tales como etiquetas <script>, controladores de eventos en línea (<img src="x" onerror="robarCookies()">), esquemas de URI ejecutables (<a href="javascript:...">) u objetos embebidos <iframe>.

El Pipeline de Desinfección con DOMPurify: Al activar la opción de desinfección, el marcado resultante se procesa en un árbol DOM virtual en memoria donde DOMPurify aplica una lista blanca rigurosa de elementos y atributos HTML5. Se descartan elementos no autorizados, se eliminan controladores de eventos, se validan protocolos seguros (http, https, mailto) y se neutralizan riesgos de DOM Clobbering antes de renderizar o exportar el documento.

Conversión Bidireccional: Algoritmos de Compilación Inversa de HTML a Markdown

Mientras que compilar Markdown a HTML consiste en una transformación descendente hacia etiquetas estandarizadas, el proceso inverso de HTML a Markdown requiere resolver ambigüedades semánticas. Dado que el vocabulario de etiquetas y atributos de estilo de HTML es sustancialmente más extenso que el repertorio sintáctico de Markdown, el analizador inverso (Turndown) recorre el árbol DOM vivo para normalizar la estructura:

Normalización de Fronteras de Bloque: Etiquetas de contenedor (<p>, <div>, <section>) se unifican en saltos de línea dobles, mientras que los títulos (<h1> a <h6>) se transcriben a marcadores de almohadilla estilo ATX (# a ######).

Mapeo de Elementos en Línea: Etiquetas de formato semántico (<strong>, <em>, <code>, <del>) se traducen a sus delimitadores Markdown correspondientes (**, *, acentos graves y ~~).

Indentación y Listas Anidadas: Las listas ordenadas y desordenadas anidadas a múltiples niveles calculan dinámicamente márgenes de sangría normalizados de 2 o 4 espacios para salvaguardar la jerarquía en el documento Markdown.

Reconstrucción Tabular y Fallbacks Seguros: Las tablas estándar de HTML se reconstruyen como tablas GFM con barras verticales. Aquellas estructuras con celdas fusionadas (rowspan o colspan) que no pueden representarse en Markdown puro se conservan de forma limpia y segura como marcado HTML en línea.

Referencia de Opciones de Configuración del Compilador

Los parámetros de configuración detallados a continuación permiten ajustar con precisión el marcado generado en función del destino de integración, herramientas de compilación y requisitos de seguridad:

OpciónFunción TécnicaEstado por DefectoCaso de Uso Recomendado
Resaltado de sintaxisProcesa el código de bloques cercados a través de highlight.js generando tokens de clase CSS (hljs-*) según la gramática del lenguaje.HabilitadoDocumentación técnica, artículos especializados, guías y tutoriales que exigen código coloreado y legible.
Desinfectar HTMLFiltra el marcado HTML compilado mediante DOMPurify para suprimir etiquetas de script, controladores de eventos en línea y protocolos no seguros.HabilitadoContenido generado por usuarios, foros de discusión, comentarios, previsualizaciones en CMS y fuentes externas.
Generar IDs en encabezadosGenera atributos de identificación slug id en etiquetas <h1> a <h6> a partir del texto del título.HabilitadoNavegación interna por anclajes, índices interactivos y tablas de contenidos (TOC) accesibles.
Omitir FrontmatterIdentifica y descarta bloques de metadatos YAML delimitados por líneas --- al inicio del archivo antes de procesar el cuerpo.HabilitadoArchivos redactados para colecciones de contenido en Astro, Hugo, Jekyll, Next.js y generadores estáticos.
Envolver en plantilla HTMLEncapsula los fragmentos HTML dentro de una plantilla completa HTML5 con declaración <!DOCTYPE html>, codificación UTF-8 y viewport responsivo.DeshabilitadoDescargas de documentos web autónomos, boletines por correo electrónico y renderización aislada en iframes.

Referencia de Equivalencias: De Sintaxis Markdown a Elementos Semánticos HTML5

La siguiente tabla resume la correspondencia estandarizada entre los constructos de marcado Markdown y los elementos de marcado semántico de HTML5:

Tipo de ElementoSintaxis de Entrada MarkdownSalida HTML CompiladaRol Semántico e Impacto SEO
Encabezados (Niveles 1–6)# Título 1 hasta ###### Título 6<h1> hasta <h6>Define la jerarquía temática del documento y las señales clave de indexación para motores de búsqueda.
PárrafoTexto separado por línea vacía<p>Texto</p>Bloque principal de texto corrido con espaciado tipográfico y lectura natural.
Énfasis Fuerte (Negrita)**texto en negrita**<strong>texto en negrita</strong>Comunica relevancia semántica prioritaria tanto a lectores de pantalla como a rastreadores web.
Énfasis (Cursiva)*texto en cursiva*<em>texto en cursiva</em>Indica modulación léxica o acentuación estilística sin conferir urgencia semántica crítica.
Cita en Bloque (Blockquote)> Texto de la cita<blockquote><p>Texto de la cita</p></blockquote>Delimita citas textuales externas, testimonios, notas editoriales o avisos destacados.
Lista no ordenada- Elemento A \n - Elemento B<ul><li>Elemento A</li><li>Elemento B</li></ul>Agrupa conjuntos de elementos sin orden secuencial estricto mediante viñetas estándar.
Lista ordenada1. Primero \n 2. Segundo<ol><li>Primero</li><li>Segundo</li></ol>Instrucciones secuenciales, tutoriales paso a paso y clasificaciones con prelación numérica.
Código en línea`const x = 1`<code>const x = 1</code>Señala identificadores técnicos, nombres de archivo, variables de código y parámetros de API.
Hipervínculo[CodeKivo](https://codekivo.com)<a href="https://codekivo.com">CodeKivo</a>Facilita el enlazado web hipertextual, atribución de fuentes y navegación interna de páginas.
Imagen![Texto alternativo](imagen.png)<img src="imagen.png" alt="Texto alternativo">Incrusta recursos visuales acompañados de atributos de accesibilidad obligatorios para lectores de pantalla.
Línea divisoria horizontal--- o ***<hr>Marca una transición temática o separación visual de contenidos a nivel de bloque.

Frequently Asked Questions

¿Cómo convertir Markdown a HTML en tiempo real con vista previa instantánea?

Escriba o pegue su texto Markdown en el panel de entrada a la izquierda. El motor de compilación analiza el contenido de forma continua en tiempo real, presentando el código HTML generado en el panel central y la maquetación renderizada en el panel de Vista Previa a la derecha. Puede copiar el código compilado con un solo clic o descargarlo directamente como archivo HTML.

¿Es compatible con tablas y listas de tareas de GitHub Flavored Markdown (GFM)?

Sí. El compilador implementa íntegramente la especificación GitHub Flavored Markdown (GFM). Procesa tablas delimitadas por barras verticales (| Columna 1 | Columna 2 |) con marcadores de alineación léxica, listas de verificación de tareas (- [ ] y - [x]), texto tachado (~~eliminado~~) y autovínculos automáticos a direcciones web y correos electrónicos.

¿Cómo funciona la conversión inversa de HTML a Markdown (HTML a MD)?

Haga clic en el botón conmutador situado sobre el editor para cambiar al modo 'HTML a Markdown'. Al pegar fragmentos de código HTML en el panel de entrada, el analizador inverso (impulsado por Turndown con complementos GFM) traduce los nodos del árbol DOM a sintaxis Markdown limpia y estándar, conservando encabezados, listas, enlaces, énfasis y bloques de código.

¿Cómo opera el resaltado de sintaxis en los bloques de código cercados?

Al habilitar la opción 'Resaltado de sintaxis', los bloques delimitados por triples acentos graves con identificadores de lenguaje (como ```javascript, ```python o ```html) se procesan mediante highlight.js. El compilador emite etiquetas semánticas <pre><code class='hljs language-*'> con clases de tokens léxicos, lo que permite que las hojas de estilos apliquen colores tipográficos diferenciados a palabras clave, cadenas y comentarios.

¿De qué manera previene la desinfección HTML los ataques de Cross-Site Scripting (XSS)?

La especificación de Markdown permite etiquetas HTML crudas por diseño para maquetaciones personalizadas. Al activar 'Desinfectar HTML', la salida generada se filtra mediante DOMPurify para suprimir etiquetas de ejecución como <script> e <iframe>, eliminar controladores de eventos en línea (como onerror u onclick) y restringir esquemas de URI no seguros como javascript:, protegiendo la aplicación frente a entradas no confiables.

¿Cómo se generan los IDs y anclajes en los encabezados para tablas de contenidos?

Al activar 'Generar IDs en encabezados', el procesador analiza el texto de cada nivel de título y deriva automáticamente un identificador de anclaje slug en formato kebab-case (por ejemplo, ## Guía Rápida se compila como <h2 id='gu-a-r-pida'>Guía Rápida</h2>). Estos identificadores facilitan la navegación interna profunda y la vinculación de tablas de contenidos.

¿Cómo gestiona la herramienta el bloque YAML Frontmatter al inicio del documento?

Los archivos redactados para generadores de sitios estáticos como Astro, Next.js, Jekyll o Hugo frecuentemente incluyen cabeceras de metadatos delimitadas por guiones triples (---). Con 'Omitir Frontmatter' habilitado, el compilador descarta automáticamente el bloque YAML frontal antes de procesar el texto, evitando que los metadatos de configuración se interpreten como reglas horizontales o párrafos no deseados.

¿Qué diferencia existe entre un fragmento HTML y envolver la salida en una plantilla completa?

Un fragmento HTML genera exclusivamente las etiquetas de contenido evaluadas (<p>, <h2>, <ul>), idóneo para su incrustación directa en sistemas de gestión de contenidos (CMS), bases de datos o plantillas de componentes. Por el contrario, 'Envolver en plantilla HTML' estructura la salida dentro de un documento HTML5 completo con declaración <!DOCTYPE html>, cabeceras meta de codificación UTF-8, escala de viewport responsiva y estilos tipográficos base para su descarga como archivo web autónomo.