O conversor Markdown para HTML do FormatArc mostrando a diferença entre símbolos escapados e sem escapeO conversor Markdown para HTML do FormatArc mostrando a diferença entre símbolos escapados e sem escape
Publicado: 2026-07-15

Caracteres de escape no Markdown: lista completa e 22 exemplos testados

Uma linha que começa com * vira um marcador de lista. # lista de preços vira um título da página. O placeholder <version> que você digitou sumiu da pré-visualização. Tudo isso acontece porque o Markdown interpretou seu símbolo como uma instrução de formatação — e nenhum desses casos gera mensagem de erro. Este guia mostra como escapar caracteres para que apareçam exatamente como digitados, com respaldo de 22 casos de teste executados em 4 renderizadores.

A resposta curta — uma barra invertida antes do símbolo

Digite uma barra invertida \ imediatamente antes do caractere que você quer exibir. Só isso.

\*isto não ficará em itálico\*

A barra invertida não aparece no resultado. O exemplo acima é exibido como a string literal *isto não ficará em itálico*, asteriscos incluídos.

Para exibir uma barra invertida literal, duplique-a: \\.

Tabela rápida — do sintoma à correção

Parta do que deu errado para achar o símbolo culpado. Todos os sintomas vêm dos casos medidos mais adiante.

O que aconteceuCausaCorreção
O texto ficou em itálico ou negritoPalavras entre * ou _Escapar como \* \_
Uma linha inteira virou títuloA linha começa com # e um espaçoEscrever \#
Apareceu uma lista numeradaA linha começa com número e pontoEscapar o ponto: 1986\.
Apareceu uma lista com marcadoresA linha começa com - ou *Escrever \- \*
O texto sumiu da páginaUma palavra entre < e >Escrever \< e \>
Uma célula de tabela se partiu ou perdeu a segunda metadeUma barra vertical dentro da célulaBarra invertida antes da barra vertical (detalhes abaixo)

Quais caracteres podem ser escapados

A especificação CommonMark sobre backslash escapesAbre em uma nova aba define que "Any ASCII punctuation character may be backslash-escaped" (qualquer sinal de pontuação ASCII pode ser escapado com barra invertida). São estes 32 caracteres:

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

Os dois lados inversos dessa regra causam a maior parte da confusão:

  • Só vale para pontuação ASCII. Diante de qualquer outro caractere, a barra invertida é apenas um caractere: a especificação diz "Backslashes before other characters are treated as literal backslashes". Por isso \n não vira quebra de linha — aparece como uma barra invertida seguida de um n
  • O escape depende da posição, não só do caractere. # só cria título no início da linha com um espaço depois; um # no meio da frase já é seguro

A próxima seção delimita essas fronteiras com medições.

Testado — o que quebra sem escape, e se a barra invertida funciona

Há muitos guias listando os caracteres escapáveis. Pouquíssimos mostram o que de fato acontece quando você não escapa, ou verificam se a barra invertida funciona em várias implementações. Por isso passamos 22 casos por 4 renderizadores: o renderizador de produção do GitHub (via Markdown API), marked 18.0.5, remark-gfm 4.0.1 e CommonMark estrito (remark-parse sem extensões). Medição em 2026-07-15; o script de reprodução e os dados brutos estão no repositório do site, em scripts/benchmarks/markdown-escape-characters/.

Estes são os casos principais.

Entrada (string medida)Sem escapeCom escape
Buy the *limited edition* today.Vira itálico (4/4 renderizadores)\*limited edition\* aparece como digitado (4/4)
# price list no início da linhaVira título h1 (4/4)\# price list aparece como digitado (4/4)
1986. What a year. no início da linhaVira lista numerada começando em 1986 (4/4)1986\. What a year. aparece como digitado (4/4)
Replace <version> with 2.0<version> some da página (4/4)\<version\> continua visível (4/4)
grep a | b dentro de uma célula de tabelaA barra vertical parte a célula e o excedente é descartado (os 3 renderizadores GFM)Com barra invertida fica em uma única célula (os 3 GFM)

O caso de número seguido de ponto é o mais fácil de deixar passar. Seja 1. ou 1986., um número com ponto no início da linha vira lista numerada e o resto da frase fica recuado. Se você abre uma frase com um ano ou um número de modelo, escape o ponto.

Para ver como o seu Markdown é interpretado, cole-o no Markdown para HTML — a conversão roda inteiramente no seu navegador e nada do que você cola é enviado para lugar nenhum.

O conversor Markdown para HTML do FormatArc mostrando a diferença entre símbolos escapados e sem escapeO conversor Markdown para HTML do FormatArc mostrando a diferença entre símbolos escapados e sem escape

As quatro implementações testadas são da família CommonMark e o comportamento de escape coincidiu por completo. Onde os dialetos divergem é outro assunto — veja CommonMark vs GFM para essas medições.

Casos em que o escape é desnecessário

Escapar demais torna o código-fonte mais difícil de ler e polui os diffs. Três padrões comuns se mostraram seguros sem nenhum escape:

  • Underscores dentro de palavras. max_retry_count_limit apareceu como digitado nos 4 renderizadores — um _ no meio de uma palavra não é tratado como ênfase
  • #hashtag sem espaço. Um # só cria título quando há um espaço depois dele; #hashtag permaneceu texto puro nos 4 renderizadores
  • Colchetes sem URL. [TODO] fix later apareceu como digitado nos 4 renderizadores. Uma ressalva: se o documento contiver uma definição de referência como [TODO]: https://..., os colchetes viram link — escape como \[TODO\] apenas nesse caso

A assimetria para lembrar: asteriscos não se comportam como underscores. foo*bar*baz ficou em itálico nos 4 renderizadores, mesmo com os asteriscos dentro de uma palavra. Não estenda seu instinto de snake_case para o *.

Onde a barra invertida não funciona

A especificação CommonMark é explícita: "Backslash escapes do not work in code blocks, code spans, autolinks, or raw HTML" (escapes não funcionam em blocos de código, code spans, autolinks nem HTML bruto). Nossos testes confirmam — um \* escrito dentro de um code span ou de um bloco de código exibiu a própria barra invertida, nos 4 renderizadores.

Duas consequências práticas:

  • Dentro de blocos de código, não escape nada. * e # aparecem exatamente como digitados
  • Tentar escapar dentro de código sai pela culatra. Escreva `\*` e seus leitores verão \*, não *

Há mais uma armadilha no fim da linha. Segundo a especificação, "A backslash at the end of the line is a hard line break" (uma barra invertida no fim da linha é uma quebra de linha forçada) — e os 4 renderizadores converteram uma \ final em <br>. Se você quis escapar um símbolo no fim da linha e a barra invertida ficou por último, ganha uma quebra de linha extra em vez de um símbolo.

Os caracteres que somem — cuidado com < e >

A maioria dos símbolos falha na direção de formatação indesejada. < e > falham na direção de texto invisível, o que é pior. Se você escreve placeholders como <version>, este caso é para você.

Nos nossos testes, o <version> de Replace <version> with 2.0 desapareceu da página renderizada nos 4 renderizadores. O mecanismo varia: o sanitizador do GitHub remove a tag desconhecida, enquanto marked e remark a repassam como HTML bruto que o navegador engole. Nos dois caminhos, seus leitores não veem nada.

Duas correções:

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

\<version\> permaneceu visível nos 4 renderizadores. Se o placeholder faz parte de um comando ou código, um code span comunica melhor essa intenção.

A única exceção contextual — barras verticais dentro de células de tabela

Tudo acima vale em qualquer parte do documento. Barras verticais dentro de células de tabela são o único lugar com regras extras. Tabelas não fazem parte do núcleo do CommonMark — são uma extensão do GFMAbre em uma nova aba — e uma barra vertical crua dentro da célula abre uma nova coluna. Pior: a especificação GFM diz que células além do número de colunas do cabeçalho são ignoradas ("the excess is ignored"). Nos nossos testes, uma célula com grep a | b foi partida na barra vertical e o b final foi descartado em silêncio (os 3 renderizadores GFM). É a única falha de escape que perde dados em vez de apenas mudar a formatação.

Escape as barras verticais com barra invertida, ou use a referência de caractere HTML &#124;. Ambas mantiveram a barra vertical dentro de uma única célula nos 3 renderizadores GFM.

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

Se a sua tabela vem de dados CSV ou de uma planilha, o CSV para Markdown escapa automaticamente as barras verticais das células ao gerar a tabela — sem conferência manual célula por célula, e a conversão nunca sai do seu navegador.

Prefira um code span quando o símbolo é código

Envolver o texto em crases também exibe os símbolos literalmente, mas as duas técnicas servem a propósitos diferentes:

  • Use barra invertida quando o símbolo pertence à prosa. Os preços podem mudar \*sem aviso\* mantém a frase com cara de frase, símbolos incluídos
  • Use um code span quando o texto é um comando, um caminho ou uma regex. C:\Users\nome e \d+ ficam melhores em fonte monoespaçada, e o estilo avisa o leitor de que é código

Como o processamento de escape fica desativado dentro de code spans, uma regex como \d+ pode ser escrita como está. Para saber como o escape é tratado ao converter HTML existente ou texto formatado em Markdown, veja o guia de HTML para Markdown.

Perguntas frequentes

Quais caracteres podem ser escapados no Markdown?

Todos os 32 sinais de pontuação ASCII (especificação CommonMarkAbre em uma nova aba). Uma barra invertida antes de letra, dígito ou caractere não ASCII não é escape — aparece como barra invertida literal.

Digitei \n mas não houve quebra de linha

\n é notação de linguagem de programação, não escape de Markdown. Barra invertida antes de letra aparece literal (confirmado nos 4 renderizadores). Para quebrar linha no Markdown, deixe uma linha em branco para novo parágrafo, ou termine a linha com barra invertida para quebra forçada.

Underscores em snake_case precisam de escape?

Não. O _ dentro de palavra não foi tratado como ênfase em nenhum dos 4 renderizadores. Asteriscos são a exceção: foo*bar*baz vira itálico mesmo dentro de palavra.

Como escapo uma barra vertical dentro de uma célula de tabela?

Coloque uma barra invertida antes da barra vertical, ou use a referência de caractere &#124;. Ambas funcionaram nos 3 renderizadores GFM testados. Se você gera tabelas a partir de CSV, o CSV para Markdown escapa por você.

Como mostro uma barra invertida ou asterisco dentro de um bloco de código?

Não faça nada. O processamento de escape não se aplica dentro de blocos de código e code spans, então * e \ aparecem exatamente como digitados. Escrever \* ali mostraria a barra invertida também.

Resumo

  • A regra central: uma barra invertida imediatamente antes do símbolo. Cobre os 32 sinais de pontuação ASCII e nada mais
  • snake_case, #hashtag e colchetes sem link não precisam de escape — escapar demais só polui o código-fonte
  • Escapes não funcionam dentro de blocos de código nem code spans, e barra invertida no fim da linha vira quebra forçada
  • < > falham tornando o texto invisível, e barras verticais em células falham perdendo dados — corrija esses dois primeiro

Para conferir como o seu Markdown renderiza, cole-o no Markdown para HTML — grátis, sem cadastro, e nada do que você cola sai do seu navegador.