Utilia

Escapar e desescapar strings

Escapa ou desescapa uma string para JSON, JavaScript, template literals, SQL, CSV, atributos HTML, expressões regulares e URLs, no teu navegador.

Como escapar ou desescapar uma string

  1. Escolhe o destino em Formato: string JSON, string JavaScript, template literal JavaScript, literal de texto SQL, campo CSV, valor de atributo HTML, expressão regular ou componente de URL.
  2. Escreve ou cola o teu texto na caixa de entrada.
  3. Clica em Escapar para transformar texto simples num literal seguro, ou em Desescapar para transformar um literal de volta em texto simples. O resultado atualiza-se enquanto escreves, no último sentido que escolheste.
  4. Ajusta as opções apresentadas para o formato: Acrescentar aspas à volta, Escapar caracteres não ASCII ou Espaços como + (dados de formulário).
  5. Clica em Copiar, ou em Usar o resultado como entrada para inverteres a operação e confirmares a ida e volta.

O número de caracteres antes e depois aparece por baixo dos botões. Tudo corre no teu navegador; nada é enviado.

O que faz cada formato

  • String JSON: escapa ", \ e os caracteres de controlo (\n, \t, \u0000…), exatamente como JSON.stringify. Com Escapar caracteres não ASCII, cada carácter acima de U+007E passa a \uXXXX (os emojis passam a um par de surrogates como 😀). Ao desescapar, o texto é aceite com ou sem as aspas duplas, e as quebras de linha reais são toleradas.
  • String JavaScript (‘…’): escapa a barra invertida, a plica, as quebras de linha e os caracteres de controlo, bem como U+2028 e U+2029, que estragam motores mais antigos. Ao desescapar, percebe \x41, A, \u{1F600}, escapes octais antigos como \101 e continuações de linha.
  • Template literal JavaScript (`…`): escapa os acentos graves, as barras invertidas e ${, para que nenhuma expressão seja avaliada; as quebras de linha e as tabulações ficam como estão, porque os template literals as permitem.
  • Literal de texto SQL (‘…’): duplica as plicas (O'Brien → 'O''Brien'), como no SQL padrão. Ao desescapar, recusa uma plica que não esteja duplicada. As barras invertidas não são tocadas: o MySQL no modo predefinido também trata \ como carácter de escape, por isso confirma as regras da tua base de dados.
  • Campo CSV (RFC 4180): envolve o campo em aspas duplas e duplica as aspas interiores quando contém uma vírgula, um ponto e vírgula, uma tabulação, aspas, uma quebra de linha ou espaços no início ou no fim. Acrescentar aspas à volta força as aspas.
  • Valor de atributo HTML: substitui &, <, >, " e ' por entidades, o que é seguro em atributos entre aspas simples ou duplas. Ao desescapar, descodifica as referências numéricas e &amp;, &lt;, &gt;, &quot;, &apos; e &nbsp;.
  • Expressão regular (texto literal): escapa com barra invertida . * + ? ^ $ { } ( ) | [ ] \ /, além das quebras de linha e tabulações, para que o padrão corresponda ao texto literalmente. O resultado é válido com ou sem a flag u.
  • Componente de URL (percent-encoding): funciona como encodeURIComponent, codificando como bytes UTF-8 tudo exceto letras, algarismos e - _ . ! ~ * ' ( ). Espaços como + (dados de formulário) usa a convenção application/x-www-form-urlencoded.

Escapar não é uma barreira de segurança para SQL

Quando escolhes SQL, a ferramenta mostra um lembrete que vale a pena repetir: a verdadeira solução para a injeção de SQL é uma consulta parametrizada (prepared statement), em que o valor é enviado separadamente do texto SQL. Escapar à mão é frágil: depende da base de dados, do conjunto de caracteres da ligação e de definições como o tratamento das barras invertidas no MySQL. Usa este resultado para ler registos, escrever dados de teste ou depurar uma consulta, nunca para construir consultas a partir de dados introduzidos pelos utilizadores.

No CSV, a ferramenta também avisa quando um valor começa por =, +, - ou @: uma folha de cálculo pode executá-lo como fórmula (injeção CSV). As aspas não impedem isso; a mitigação habitual é prefixar o valor com um apóstrofo ou um espaço.

Perguntas frequentes

Qual é a diferença entre uma string JSON e uma string JavaScript?

O JSON só permite aspas duplas e um pequeno conjunto de escapes (\" \\ \/ \b \f \n \r \t \uXXXX). O JavaScript também aceita plicas, acentos graves, \x41, \u{…}, \v e \0. Os escapes JSON válidos são JavaScript válido, mas o contrário não é verdade.

Porque é que desescapar falha com «sequência de escape inválida»?

O texto contém uma barra invertida seguida de algo que o formato não permite, como \u12 com menos de quatro algarismos hexadecimais, ou uma barra invertida isolada no fim. A mensagem de erro mostra a sequência com problema.

O CSV precisa de aspas em todos os campos?

Não. O RFC 4180 só exige aspas quando o campo contém uma vírgula, aspas duplas ou uma quebra de linha. Esta ferramenta também põe entre aspas os pontos e vírgulas, as tabulações e os espaços no início ou no fim, porque muitas folhas de cálculo os usam como separadores ou os cortam.

Escapar atributos HTML chega para prevenir XSS?

É correto para texto colocado dentro de um valor de atributo entre aspas. Não chega para atributos que são eles próprios código ou URLs, como onclick ou href="javascript:…"; esses precisam de validação, não apenas de escape.

O meu texto é enviado para um servidor?

Não. Todas as conversões correm localmente no teu navegador, por isso podes colar sem receio valores de configuração ou dados que não partilharias.