Quitar selectores de variación Unicode
«Hello ❤️ world ☺️» pierde sus 2 selectores ocultos y vuelve como «Hello ❤ world ☺», con 15 caracteres en lugar de 17. Letras, emojis, puntuación y espacios se quedan; solo se van los interruptores de estilo invisibles. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- Hello ❤️ world ☺️
- Resultado
- Hello ❤ world ☺
- Longitud
- 15
- Longitud original
- 17
- Eliminado
- 2
Los selectores de variación Unicode son caracteres invisibles que acompañan a glifos base e indican al renderizador si debe mostrar presentación emoji, presentación de texto o una variante concreta de glifo. Al copiar y pegar desde mensajería, redes sociales y herramientas de diseño suelen quedar U+FE0F (estilo emoji) o U+FE0E (estilo texto) tras corazones, estrellas y otros símbolos, y los documentos CJK pueden incluir puntos del Variation Selectors Supplement en secuencias ideográficas. Esos selectores rompen las comprobaciones de igualdad de cadenas, inflan longitudes, confunden índices de búsqueda y generan diffs misteriosos cuando dos cadenas se ven idénticas en pantalla. Esta herramienta recorre su texto por punto de código Unicode, elimina todos los selectores de variación de los rangos estándar y devuelve la cadena limpia con un contador de eliminados y banderas de cambio. Las letras base, emoji, puntuación y espacios se conservan: solo se quitan los conmutadores invisibles. La entrada vacía se rechaza con un error de validación claro para que los clientes detecten campos ausentes.
Cómo funciona la eliminación de selectores de variación
Un selector de variación no es una letra visible; es un punto de código sin avance de espacio que modifica la presentación del carácter precedente. El bloque principal va de U+FE00 a U+FE0F: Variation Selectors 1 a 16. Dentro de ese bloque, U+FE0E pide presentación de texto (monocroma) para símbolos con capacidad emoji, y U+FE0F pide presentación emoji (a color).
Un corazón seguido de FE0F suele renderizarse como emoji colorido, mientras que la misma base sola o con FE0E puede verse como dingbat plano, según la fuente y la plataforma. Un segundo bloque, U+E0100 a U+E01EF (Variation Selectors Supplement), admite secuencias de variación ideográfica para caracteres CJK cuando se requiere una forma de glifo concreta. Esta capacidad elimina ambos bloques por completo.
La implementación recorre la cadena con un iterador de puntos de código para que los caracteres astrales del Supplement se reconozcan como unidades únicas y no como pares sustitutos partidos. Cada punto de código en cualquiera de los rangos VS se descarta y se cuenta; todo lo demás se añade al resultado. Las cadenas vacías fallan antes del recorrido.
Como la ruta es puro parse sobre cadenas, la latencia se mantiene submilisegundo en formularios típicos y el modelo de coste publicado es analítico, no basado en tokens de modelo.
Dónde se usan las herramientas de quitar selectores de variación
Los equipos de producto y mensajería normalizan el contenido generado por usuarios para que las comprobaciones de igualdad y la detección de duplicados ignoren conmutadores de presentación invisibles que el usuario no pretendía escribir. Los sistemas de búsqueda y etiquetado quitan selectores de variación de consultas y títulos almacenados para que los filtros coincidan tanto si un corazón llegó con FE0F desde iOS como sin él desde un editor de texto plano.
Los equipos de contenido y localización preparan cadenas estables para nombres de archivo, segmentos de URL (cuando no usan una herramienta de slug dedicada), asuntos de correo en relés exigentes y archivos CSV abiertos en herramientas que rompen o recodifican Unicode. Si más adelante necesita eliminar caracteres de ancho cero, quitar diacríticos, normalización Unicode completa (NFD/NFC) o conversión de shortcodes emoji, trátelos como intenciones de búsqueda y landings distintas, no sobrecargando esta página de remove-variation-selectors.
Preguntas frecuentes
¿Qué hace quitar selectores de variación?
Elimina los puntos de código de selectores de variación Unicode (U+FE00–U+FE0F y U+E0100–U+E01EF) de su texto —incluidos los habituales FE0F emoji y FE0E texto— y devuelve la cadena limpia más un recuento de eliminados.
¿Qué ocurre si envío texto vacío?
Las cadenas vacías se rechazan para que los clientes detecten campos ausentes en lugar de recibir un resultado vacío en silencio.
¿Elimina espacios de ancho cero o acentos?
No. Solo se quitan selectores de variación. Espacios de ancho cero, marcas bidi, diacríticos combinantes y otros caracteres invisibles requieren herramientas aparte.
¿Cambiará un texto ya limpio?
No. Si no hay selectores de variación, result es igual al texto original, changed es false y removed es cero.
¿Cuánto cuesta?
La herramienta del navegador es gratuita y se ejecuta en local.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/str/remove-variation-selectors \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello ❤️ world ☺️"}'const res = await fetch("https://api.kit.forhosting.com/str/remove-variation-selectors", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello ❤️ world ☺️"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/remove-variation-selectors",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello ❤️ world ☺️"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/remove-variation-selectors", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello ❤️ world ☺️"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello ❤️ world ☺️"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/remove-variation-selectors", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "Hello ❤️ world ☺️"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.remove_variation_selectors",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Cómo funciona la eliminación de selectores de variación
No hay conmutador de locale, ni muestreo aleatorio, ni llamada de red: la misma entrada produce siempre el mismo JSON. Las cargas más largas que el tope documentado también fallan con invalid_input para que una sola petición no monopolice la memoria del Worker.
Qué envía usted y qué recibe de vuelta
Envíe un único campo obligatorio llamado text con la cadena no vacía que desea limpiar. Números y booleanos se convierten a su forma decimal o true/false; objetos, arrays, NaN e Infinity se rechazan. Comprobaciones clásicas: un corazón con FE0F final pasa al corazón desnudo, un smiley con FE0F pierde el selector de presentación y conserva el emoji base, prosa mixta donde solo desaparecen los selectores invisibles, y texto CJK con selectores Supplement reducido a ideógrafos base. Se aceptan alias como input, value, data, s, message, string, content y body al conectar clientes antiguos. En caso de éxito la respuesta repite el text original, el result limpio, la length del resultado, original_length, un booleano changed, removed como recuento de puntos de código de selectores de variación eliminados, y operation con valor remove_variation_selectors. Use el formulario gratuito del navegador para pegar y copiar con rapidez, y llame al mismo contrato desde scripts al normalizar columnas CSV, exportaciones de chat o payloads de API en bloque. El precio de las llamadas API correctas es la base publicada de $0.002 por ítem; los fallos de validación, incluida la entrada vacía, no consumen saldo prepago.
Dónde se usan las herramientas de quitar selectores de variación
Los ingenieros de datos que limpian exportaciones de CRM, columnas de hojas de cálculo y volcados de API sociales suelen forzar campos de texto libre por un strip de VS antes de unir por claves blandas o cargar en almacenes que indexan por cadena exacta. Como esta capacidad es un motor de parse puro, el precio de API es la base publicada de $0.002 por ítem correcto y la validación fallida no consume saldo.
Casos de integración
Normalizar emoji de chat y API sociales
Quite selectores de presentación FE0F/FE0E para que corazones y símbolos se comparen iguales entre plataformas que inyectan estilos de variación distintos.
Limpiar exportaciones CSV y texto libre
Elimine caracteres VS ocultos de pegados masivos y volcados de API antes de uniones, comprobaciones de unicidad o cargas a almacén.
Pruebas golden y claves de búsqueda estables
Haga que fixtures y etiquetas de faceta no dependan de conmutadores de presentación invisibles para que pruebas y filtros sigan siendo deterministas.