Todos los artículos

Espacios y caracteres invisibles: la causa oculta de errores extraños

Copiar un titular o una frase corta desde Word o Google Docs y pegarlo en un campo de un formulario tiene una trampa habitual: el procesador de texto suele insertar un espacio de no separación (U+00A0, el mismo carácter que la entidad HTML  ) en vez de un espacio normal, precisamente para evitar que ese punto se corte al final de una línea.

Por qué esto causa errores extraños

El síntoma más clásico es una comparación de cadenas que devuelve inesperadamente «no son iguales», aunque el texto en pantalla se vea idéntico. La causa suele ser que una cadena contiene un espacio normal y la otra ese espacio de no separación importado desde Word. Visualmente no hay diferencia; para el ordenador, sí — y es justo el tipo de error que pasa desapercibido en una revisión de código porque no se ve en el diff.

Recorte (trim)

Trim elimina los caracteres de espacio en blanco del inicio y el final de una cadena, dejando intacto el contenido intermedio. Es una operación estándar de limpieza de entrada de usuario: un espacio de más accidental al principio de un campo de formulario no debería afectar a la comparación o validación del valor.

Colapsar espacios en blanco

Otra operación habitual es sustituir varios caracteres de espacio en blanco consecutivos por uno solo. Es útil para texto copiado de una fuente con formato (un PDF o una tabla, por ejemplo), donde pueden aparecer espacios dobles o tabuladores accidentales en lugar de un solo espacio.

Para qué sirve

  • Diagnosticar por qué falla la comparación de dos cadenas aparentemente idénticas.
  • Limpiar de caracteres invisibles y sobrantes un texto copiado de un procesador de texto o una página web.
  • Normalizar la entrada de usuario antes de guardarla en una base de datos.

Caracteres de ancho cero

Además de los caracteres de espacio en blanco visibles existen los caracteres de ancho cero (zero-width space, zero-width joiner) — no ocupan ningún espacio en pantalla, pero están presentes en el texto como caracteres independientes. A veces se cuelan en el texto al copiar desde ciertos sitios web o mensajerías, y pueden romper de forma imperceptible una comparación de cadenas o una búsqueda, permaneciendo completamente invisibles incluso en un editor de texto.

Probar la herramienta