Idioma: Español

tools / escape

escape/

Escapa y desescapa entidades HTML, Unicode \uXXXX y cadenas JS.

Texto plano

Escapado

Preguntas frecuentes

¿Qué diferencia hay entre escapar entidades HTML, Unicode y cadenas JS?

Son tres notaciones distintas, así que elige la que corresponda al lugar donde irá el texto. Las entidades HTML tienen la forma & y < y permiten poner texto en una página web de forma segura; los escapes Unicode son puntos de código como \u4f60, habituales en JSON y en registros; el escape de cadenas JS trata comillas, barras invertidas y saltos de línea para que el texto pueda ir dentro de código JavaScript.

¿Qué caracteres cambia el escape HTML y cambia el texto en chino?

Solo cinco caracteres: & pasa a &amp;, < pasa a &lt;, > pasa a &gt;, la comilla doble pasa a &quot; y la comilla simple pasa a &#39;. El texto en chino, los espacios, los saltos de línea y todo lo demás se quedan como están, y nada se convierte en formas como &#x4E2D;. Para el cuerpo de texto de HTML o un valor de atributo entre comillas, estos cinco son los que hay que escapar.

¿Por qué algunas entidades &xxx; no cambian al desescapar HTML?

Las entidades con nombre que la herramienta no reconoce se dejan tal cual, sin error. Tiene un conjunto integrado de las habituales (letras latinas y griegas, puntuación, monedas, flechas, símbolos matemáticos, etc.); los nombres distinguen entre mayúsculas y minúsculas y el punto y coma final es obligatorio. Para un nombre que no esté integrado, escríbelo como entidad numérica, como &#20013; o &#x4E2D;, y se decodificará. Una entidad numérica cuyo punto de código sea 0, mayor que 10FFFF o esté en el rango de sustitutos se convierte en el carácter de sustitución �.

¿Cómo funciona el escape Unicode y por qué un emoji se convierte en dos partes \u?

El escape Unicode solo trata los caracteres no ASCII; las letras, los dígitos y los símbolos ASCII se quedan como están, así que «你好 abc» se convierte en \u4f60\u597d abc, con los dígitos hexadecimales en minúscula. Los caracteres fuera del BMP, como los emojis, se dividen en un par sustituto igual que hace JavaScript, y dan dos partes como \ud83d\ude00. Al desescapar se aceptan tanto \uXXXX como \u{…}, los pares sustitutos contiguos se vuelven a unir en un solo carácter y un \u mal formado se deja tal cual, sin error.

¿Puedo pegar directamente en el código el resultado del escape de cadenas JS?

Sí, basta con ponerle comillas alrededor; sirven tanto las simples como las dobles, porque se escapan las dos. Las barras invertidas, los saltos de línea y los tabuladores pasan a ser \\ \n \t, los demás caracteres de control se escriben como \xHH y el texto en chino no se escapa. Los acentos graves (backticks) y ${ no se escapan, así que si el texto va dentro de una plantilla literal tendrás que tratarlos tú.

¿Qué significa el mensaje «Error al desescapar: Carácter N: ...»?

La barra invertida de esa posición va seguida de algo no válido. En el modo Cadena JS, \x debe ir seguido de dos dígitos hexadecimales, \u de cuatro dígitos hexadecimales (o de 1 a 6 dentro de \u{…}), los escapes octales como \1 a \7 no se admiten, y una sola barra invertida al final también es un error. Una causa habitual es una ruta de Windows pegada: en C:\users, el \u no es un escape válido. Las barras invertidas de una ruta nunca necesitaron desescaparse.

¿Puede usarse el resultado escapado como cadena JSON?

Desescapar sí, escapar no. Secuencias como \n, \", \/ y \uXXXX de una cadena JSON se pueden convertir de nuevo en el texto original con el desescape «Cadena JS». Pero la dirección de escape escribe la comilla simple como \' y los caracteres de control como \xHH, y JSON no acepta ninguna de las dos; para obtener una cadena JSON válida, usa JSON.stringify.

¿Se sube mi texto y es seguro pegar contenido de origen desconocido?

No se sube nada: el escape y el desescape se ejecutan en tu navegador y no hay límite de caracteres; con más de un millón de caracteres, la página espera a que te detengas 0.5 segundos antes de recalcular. El desescape de HTML y de JS lo analiza la propia herramienta pieza por pieza, sin el DOM de la página ni eval, así que si pegas algo como <script> solo obtienes texto y nunca se ejecuta.