Tous les articles

Espaces et caractères invisibles : la cause cachée de bugs étranges

En typographie française, l'espace insécable n'est pas un détail facultatif : les règles typographiques classiques (celles de l'Imprimerie nationale, notamment) imposent une espace fine insécable avant les signes doubles « ; », « : », « ! » et « ? », ainsi qu'à l'intérieur des guillemets français « comme ceci » — précisément pour que ces signes ne se retrouvent jamais isolés en début de ligne.

Pourquoi ça provoque des bugs étranges

Ce même caractère, indispensable en mise en page, devient un piège en programmation : une comparaison de chaînes renvoie de façon inattendue « pas égales », alors que le texte à l'écran paraît identique. La cause est souvent qu'une chaîne contient un espace normal et l'autre une espace insécable, copiée par exemple depuis un document Word respectant ces règles typographiques. Visuellement, aucune différence ; pour l'ordinateur, si.

Le trim

Le trim retire les caractères d'espacement au début et à la fin d'une chaîne, laissant intact le contenu au milieu. C'est une opération standard de nettoyage de saisie utilisateur — un espace superflu accidentel en début de champ de formulaire ne devrait pas affecter la comparaison ou la validation d'une valeur.

Réduction des espaces

Une autre opération courante consiste à remplacer plusieurs caractères d'espacement consécutifs par un seul. C'est utile pour du texte copié depuis une source mise en forme (un PDF ou un tableau, par exemple), où des doubles espaces ou des tabulations accidentels peuvent remplacer un simple espace.

À quoi ça sert

  • Diagnostiquer pourquoi la comparaison de deux chaînes apparemment identiques échoue.
  • Nettoyer un texte copié depuis un traitement de texte ou une page web des caractères superflus et invisibles, y compris les espaces insécables mal placées.
  • Normaliser une saisie utilisateur avant de l'enregistrer dans une base de données.

Les caractères de largeur nulle

Outre les caractères d'espacement visibles, il existe des caractères de largeur nulle (zero-width space, zero-width joiner) — ils n'occupent aucune place à l'écran, mais restent présents dans le texte comme des caractères distincts. Ces caractères se glissent parfois dans le texte lors d'un copier-coller depuis certains sites ou messageries, et peuvent casser silencieusement une comparaison de chaînes ou une recherche, tout en restant totalement invisibles même dans un éditeur de texte.

Essayer l'outil