tools / escape
escape/
Escape e unescape de entidades HTML, Unicode \uXXXX e strings JS.
Texto simples
Escapado
Perguntas frequentes
Qual é a diferença entre escape de entidades HTML, Unicode e strings JS?
São três notações diferentes, então escolha a que corresponde ao destino do texto. As entidades HTML têm a forma & e < e permitem colocar texto numa página web com segurança; os escapes Unicode são pontos de código como \u4f60, comuns em JSON e em logs; o escape de strings JS cuida de aspas, barras invertidas e quebras de linha para que o texto possa ficar dentro de código JavaScript.
Quais caracteres o escape HTML altera? Texto em chinês muda?
Apenas cinco caracteres: & vira &, < vira <, > vira >, aspas duplas viram " e aspas simples viram '. Texto em chinês, espaços, quebras de linha e todo o resto ficam como estão, e nada é convertido em formas como 中. Para texto no corpo do HTML ou em um valor de atributo entre aspas, são esses cinco que precisam de escape.
Por que algumas entidades &xxx; não mudam depois de desescapar HTML?
Entidades nomeadas que a ferramenta não reconhece são mantidas como estão, sem erro. Ela tem um conjunto embutido das mais comuns (letras latinas e gregas, pontuação, moedas, setas, símbolos matemáticos e assim por diante); os nomes diferenciam maiúsculas de minúsculas e o ponto e vírgula final é obrigatório. Para um nome que não esteja embutido, escreva-o como entidade numérica, como 中 ou 中, e ele será decodificado. Uma entidade numérica cujo ponto de código seja 0, maior que 10FFFF ou esteja na faixa de pares substitutos vira o caractere de substituição �.
Como funciona o escape Unicode? Por que um emoji vira duas partes \u?
O escape Unicode só trata caracteres não ASCII; letras, dígitos e símbolos ficam como estão, então "你好 abc" vira \u4f60\u597d abc, com dígitos hexadecimais em minúsculas. Caracteres fora do BMP, como emojis, são divididos em um par substituto do jeito que o JavaScript faz, resultando em duas partes como \ud83d\ude00. Ao desescapar, tanto \uXXXX quanto \u{…} são aceitos, pares substitutos adjacentes são juntados de volta em um único caractere e um \u malformado é mantido como está, sem erro.
Posso colar o resultado do escape de string JS direto no código?
Sim, basta colocá-lo entre aspas; aspas simples ou duplas funcionam, porque os dois tipos de aspas são escapados. Barras invertidas, quebras de linha e tabulações viram \\ \n \t, os outros caracteres de controle são escritos como \xHH, e texto em chinês não é escapado. Crases e ${ não são escapados, então, se o texto for para um template literal, você precisa tratá-los por conta própria.
O que significa a mensagem "Falha ao desescapar: Caractere N: ..."?
A barra invertida naquela posição é seguida de algo inválido. No modo de string JS, \x precisa ser seguido de dois dígitos hexadecimais, \u de quatro dígitos hexadecimais (ou de 1 a 6 dentro de \u{…}), escapes octais como \1 a \7 não são suportados, e uma barra invertida sozinha no final também gera erro. Uma causa comum é um caminho do Windows colado: em C:\users, o \u não é um escape válido. Barras invertidas em caminhos nunca precisaram ser desescapadas.
O resultado do escape pode ser usado como string JSON?
Desescapar funciona; escapar, não. Sequências como \n, \", \/ e \uXXXX de uma string JSON podem ser convertidas de volta ao texto original com o desescape de "String JS". Mas a direção de escape escreve uma aspa simples como \' e caracteres de controle como \xHH, e o JSON não aceita nenhum dos dois; para gerar uma string JSON válida, use JSON.stringify.
Meu texto é enviado? É seguro colar conteúdo de origem desconhecida?
Nada é enviado: o escape e o desescape rodam no seu navegador, e não há limite de caracteres; com mais de um milhão de caracteres, a página espera você parar por 0,5 segundo antes de recalcular. O desescape de HTML e de JS é interpretado trecho por trecho pela própria ferramenta, sem usar o DOM da página nem eval, então colar algo como <script> só resulta em texto e nunca é executado.