\u200b (Zero width space) des caractères dans mon code JS. D'où venaient-ils?

Je suis en train d'élaborer un front-end d'une application web à l'aide de NetBeans IDE 7.0.1. Récemment, j'ai eu un très vilain bug, que j'ai enfin résolu.

Dire que j'ai le code

var element = '<input size="3" id="foo" name="elements[foo][0]" />';
$('#bar').append(element);

J'ai remarqué que quelque chose est mal passé quand j'ai vu que size attribut ne fonctionne pas sous Chrome (n'a pas vérifié dans d'autres navigateurs). Quand j'ai ouvert cet élément dans l'Inspecteur, il a été interprété comme quelque chose comme

<input id="&quot;3&quot;" name="&quot;elements[foo][0]&quot;" 
    size="&quot;foo&quot;" />

Ce qui était plutôt étrange. Après retaper manuellement le element chaîne de caractère en caractère, le bug a disparu. Quand je annuler ed ce changement que j'ai remarqué que Netbeans m'a alerté sur certains caractères Unicode dans mon ancien code. Il a été \u200b - une largeur nulle espaces après chaque '=', entre '][' et à la fin de la chaîne. Ainsi, la chaîne semble normal car zéro espaces de largeur n'est pas affichée, mais après avoir échappé à ma chaîne a été

'<input size=\u200b"3" id=\u200b"foo" name=\u200b"elements[foo]\u200b[0]" />\u200b'

Maintenant où diable ai-je les obtenir?

Je ne sais pas où j'ai copié le code de element partir, mais c'est certainement l'une des opérations suivantes:

  • Autre volet de Netbeans de l'Éditeur de fichier modèle HTML;
  • Google Chrome Inspecteur, "Copier en tant que HTML' action;
  • Google Chrome vue de source de la page (très hésitant).

Mais je ne peux pas reproduire le bug avec le ni de.

J'utilise Netbeans 7.0.1 et Google Chrome 13.0 sous Windows 7. Pas de clavier les commutateurs ou quelque chose comme il est en cours d'exécution. Je suis aussi à l'aide de Git pour le contrôle de version, mais je n'ai pas tiré de ce code, ainsi il est très peu probable que Git est à blâmer. Il ne peut pas être une stupide blague de mes collègues, parce qu'ils sont très bien élevés.

Des suggestions qui a foiré mon code?

  • Effrayant. J'espère vous retrouver.
  • Merci, @RichieHindle. J'ai donné sur le suivi par ma propre, j'espère que la communauté vous aidera. Après tout ce n'est pas effrayant après je sais comment le résoudre (analyse des sources de "\u200b" apparences). Mais je suis curieux de savoir d'où cela provenait.
  • est votre deuxième ligne de code l'appel de jQuery? Si oui, Pouvez-vous essayer de "alerte" le contenu de l'élément var à l'aide de escape() et/ou encode() avant de l'utiliser plus; pouvez-vous essayer de ré-encoder vos append contournant jQuery (utiliser getElementsByTagName(), append()) pour clairement falsifier jQuery comme la source de tous les maux?
  • si jQuery, vous conseille version .... peut-être quelqu'un qui essaie de reproduire le problème est d'utiliser une version différente
  • c'est jQuery 1.4.2, mais il n'a rien à voir avec le bug, parce que ceux de Longueur Zéro Espaces a été collé dans mon code, qui n'est pas généré par le script. Ce que j'essaie de savoir comment j'ai réussi à copier à l'endroit.
InformationsquelleAutor Hnatt | 2011-08-14