wake-up-neo.net

Was ist das INSANE-Raumzeichen ??? (Google Chrome)

Das macht mich absolut!! & &% & $ Verrückt ... es widersetzt sich allem, was mir einfällt.

DIESES Zeichen hier ... " "

Zwischen diesen Anführungszeichen ... öffnen Sie Google Chrome und prüfen Sie. Sie werden sehen, es ist ein  ... normal richtig? Klicken Sie nun mit der rechten Maustaste und sehen Sie tatsächlich die Quelle dieser Stapelüberlaufseite. Es ist ein normaler Bereich ... (auch der Charakter, den ich kopiert hatte, war ein tatsächlicher Bereich).

Ich könnte verstehen, ob es sich um eine Art Rich-Text-Editor oder etwas handelt, aber in der Roh-HTML-Quelle befindet sich ein regulärer Bereich. Was gibt es also?

Hier ist nur mit der Leertaste (was gut funktioniert) ... " ".

Sie können es sogar kopieren und überall einfügen, Chaos anrichten und Chrom überall   setzen. Auch wenn das, was Sie in Ihre Zwischenablage kopieren, nur ein Leerzeichen ist.

Ich habe diese dummen Charaktere überall auf meiner Website nach dem Zufallsprinzip aufgetaucht und ich habe keine Ahnung, woher sie kommen, oder WARUM ist Google, ein SPACE in ein Nbsp umzuwandeln?

Ich habe versucht, den eigentlichen Zeichencode zu überprüfen, und es ist ein regulärer Bereich aus allen Dingen, die ich finden kann ...

Jede einzelne Methode, die ich versuche, zeigt es als NORMAL-Feld an ... also, was gibt es?

Wenn ich Ruby benutze und " ".ord mache, bekomme ich 32. Wenn ich es mit dem kaputten Raum mache, bekomme ich auch 32.

Bitte hilf mir, ich verliere meinen Verstand.

edit : Sie können dies beweisen ... Quelltext auf dieser Seite anzeigen und Sie sehen zwei leere " " wie gewohnt. Schauen Sie sich jetzt die Konsole an, und nur das eine wird   sein, die Rohquelle ist jedoch identisch.

Bild für Personen, die nicht mit Chrom arbeiten (dies ist der eigentliche Beitrag über Chrome-Entwicklungswerkzeuge): enter image description here

Hier ist der HTML-Code des gleichen Textes, den Sie sehen, wenn Sie den Quelltext anzeigen ... kein nbsp zu finden.

enter image description here

22
Tallboy

Wenn ich den Quellcode dieser Seite in Internet Explorer anzeigen oder direkt vom Server herunterladen und in einem Texteditor anzeigen kann, wird das erste betreffende Leerzeichen im HTML-Code wie folgt formatiert:

THIS character right here... " "

Beachten Sie die Entität  . Das ist der Unicode-Codepunkt U+00A0 NO-BREAK SPACE. Chrome ist einfach nur Nizza und formatiert es bei der Überprüfung des HTML-Codes als  . Aber machen Sie keinen Fehler, es handelt sich um ein wirklich sicheres Leerzeichen, nicht um einen Unicode-Codepunkt U+0020 SPACE, wie Sie es erwarten. U+00A0 wird visuell wie U+0020 angezeigt, es handelt sich jedoch um semantisch unterschiedliche Zeichen.

Das zweite betreffende Leerzeichen wird im eigentlichen HTML-Code folgendermaßen formatiert:

<p>Here's just with hitting the space key (which works fine)... <code>" "</code>.</p>

Es ist also Unicode-Codepunkt U+0020 und nicht U+00A0. Durch das Anzeigen der Roh-Hex-Daten dieser Seite wird Folgendes bestätigt:

screenshot showing non-breaking space

screenshot showing normal space

27
Remy Lebeau

Es stellt sich heraus, dass die beiden scheinbar identischen Whitespace-Zeichen nicht identisch sind. 

Erblicken:

var characters = ["a", "b", "c", "d", " "];

var typedSpace  = " ";
var copiedSpace = " ";

alert("Typed: " + characters.indexOf(typedSpace));   // -1
alert("Copied: " + characters.indexOf(copiedSpace)); // 4    
alert(typedSpace === copiedSpace);                   // false

JSFiddle

typedSpace.charCodeAt(0) gibt 32 zurück, den klassischen &#32;-Raum. Während copiedSpace.charCodeAt(0) 160 zurückgibt, wird das &#160 AKA &nbsp;-Zeichen zurückgegeben. 

Der Unterschied zwischen den beiden ist, dass eine ganze Reihe von &#160;, die nacheinander wiederholt werden, ihren Boden halten und zusätzlichen Abstand zwischen ihnen schaffen, während eine ganze Reihe von &#32;-Zeichen zu einem Leerzeichen zusammengedrückt wird.

Zum Beispiel:

A &#160;&#160;&#160;&#160;&#160; B ergibt: A B

A &#32;&#32;&#32;&#32;&#32; B ergibt: A B

Versuchen Sie Folgendes, um das Zeichen &#160; mit einem Zeichen &#32; in einer Zeichenfolge zu konvertieren:

.replace(new RegExp(String.fromCharCode(160),"g")," ");

Für die Menschen in der Zukunft wie ich, die dies von einem hohen Niveau bis hin zu den Zeichencodes debuggen mussten, grüße ich Sie.

5
Charles Clayton

Es ist ein unversehrter Raum. &nbsp; ist die Entität, die verwendet wird, um einen geschützten Bereich darzustellen. Es handelt sich im Wesentlichen um einen Standardbereich. Der Hauptunterschied besteht darin, dass ein Browser eine Textzeile an der Stelle, die dieser &nbsp; einnimmt, nicht brechen (oder umbrechen) soll.

Wahrscheinlich wird das Zeichen von Ihrem HTML-Editor eingefügt. Könnten Sie ein genaueres Beispiel im Zusammenhang geben?

2
TooltotheDeath

Dies ist eigentlich keine Antwort auf die Frage, sondern ein Werkzeug, mit dem dieser spezielle Leerraum in den HTML-Seiten der Seiten einer Website erkannt werden kann, damit wir ihn suchen und entfernen können.

Das Werkzeug, das im Wesentlichen funktioniert, ist:

  1. Ruft den Inhalt einer URL ab
  2. Sucht nach Vorkommen von chr(194).chr(160) im HTML-Inhalt
  3. Ersetzt und markiert die Vorkommen mit etwas mehr Sichtbarem

Auf diese Weise können Sie tatsächlich wissen, wo sich die Leerzeichen befinden, und Ihre Seite richtig bearbeiten, um sie zu entfernen.

Die Online-Version des Tools finden Sie hier: 

http://tools.heavydots.com/nbsp-space-char-detect/

Ein Arbeitsbeispiel kann mit der URL dieser Frage gesehen werden, die ein Vorkommen enthält: 

http://tools.heavydots.com/nbsp-space-char-detect/?url=http%3A%2F%2Fstackoverflow.com%2Fquestions%2F26962323%2Fwhat-is-this-insane-space-character-google -chrome & highlight = 1 & hstring =% 7BNBSP% 7D

Es gibt ein Github-Repo, wenn jemand möchte, dass der Code ihn lokal ausführt:
https://github.com/HeavyDots/nbsp-space-char-detect

Ich hoffe, jemand findet es nützlich. Für jedes Feedback gibt es einen Kommentarbereich auf der Tool-Seite.

Aktualisiert am 5. Januar 2017

In unserem Unternehmensblog haben wir gerade einen lustigen Beitrag über diesen ärgerlichen weißen Raum geschrieben. Sie sind eingeladen, vorbeizuschauen und es zu lesen! :-) 

http://heavydots.com/blog/when-the-white-space-became-a-beast

Wie bereits in den vorangegangenen Antworten erwähnt, handelt es sich hierbei um ein sicheres Leerzeichen (NBSP). Auf Macs wird dieses Zeichen eingefügt, wenn Sie aus Versehen Alt + Leertaste drücken (dies geschieht meistens, wenn Sie Code eingeben, für den Sonderzeichen Alt erforderlich sind, z. B. [ bei einem deutschen Tastaturlayout).

Um diese Tastenkombination einem normalen SPACE-Zeichen zuzuordnen, können Sie Ihre Standard-Tastenkombination wie auf Apple SE vorgeschlagen ändern.

1
Frank Schmitt

Für Leerzeichen drücken Sie "Alt + 0160", was ebenfalls ein Zeichen ist.

0
Keyur Sureliya