Подтвердить что ты не робот

Что это за космический персонаж INSANE??? (Гугл Хром)

Это сводит меня абсолютно,! &% & $безумный... это бросает вызов всему, что я могу придумать.

ЭТОТ символ здесь... " "

В промежутке между этими цитатами... откройте google chrome и проверьте. Вы увидите его  ... нормальное право? Теперь щелкните правой кнопкой мыши и просмотрите источник этой страницы. Это регулярное пространство... (также, я скопировал символ, было фактическим пространством).

Я мог бы понять, если это какой-то богатый текстовый редактор или что-то в этом роде, но в исходном исходном HTML файле есть регулярное пространство, и что дает?

Здесь просто с нажатием клавиши пробела (который отлично работает)... " ".

Вы даже можете скопировать его и вставить его повсюду и нанести хаос и сделать хром по всему миру  . Несмотря на то, что скопированные в буфер обмена просто пробелы.

У меня эти глупые символы появляются повсюду случайно на моем веб-сайте, и я понятия не имею, откуда они взялись, или ПОЧЕМУ Google конвертирует SPACE в nbsp;

Я попытался проверить фактический код символа, и это регулярное пространство из всех вещей, которые я могу найти...

Каждый метод, который я пытаюсь показать, представляет собой НОРМАЛЬНОЕ пространство... так что дает?

Если я использую ruby ​​и do " ".ord, я получаю 32. Если я делаю это со сломанным пространством, я также получаю 32.

Пожалуйста, помогите мне потерять мой разум.

изменить: вы можете доказать это... просмотреть источник на этой странице, и вы увидите два пустых " " как обычно. Теперь посмотрите в консоли, и только один будет  , но исходный источник идентичен.

Изображение для людей, не использующих хром (это просматривает этот пост через инструменты chrome dev): enter image description here

Здесь HTML того же текста, который вы видите при просмотре источника... no nbsp.

enter image description here

4b9b3361

Ответ 1

Когда я просматриваю этот источник страницы в Internet Explorer или загружаю его непосредственно с сервера и просматриваю его в текстовом редакторе, первый пробельный символ в этом формате отформатирован следующим образом:

THIS character right here... " "

Обратите внимание на объект  . Это код Unicode U+00A0 NO-BREAK SPACE. Chrome просто хорош и повторно форматирует его как   при проверке HTML. Но не ошибитесь, это реальное неразрывное пространство, а не Unicode codepoint U+0020 SPACE, как вы ожидаете. U+00A0 визуально отображается так же, как U+0020, но они являются семантически разными символами.

Второй пробельный символ в этом формате отформатирован следующим образом:

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

Так что это код Unicode U+0020, а не U+00A0. Просмотр необработанных шестнадцатеричных данных этой страницы подтверждает, что:

screenshot showing non-breaking space

screenshot showing normal space

Ответ 2

Получается, что два, казалось бы, одинаковых пробельных символа не являются одинаковыми символами.

Вот:

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) возвращает 32, классическое пространство &#32;. В то время как copiedSpace.charCodeAt(0) возвращает 160, символ &#160 AKA &nbsp;.

Разница между ними состоит в том, что целая куча &#160;, повторяемая один за другим, будет удерживать свое место и создавать дополнительное пространство между ними, тогда как целая группа повторяющихся символов &#32; будет сжиматься вместе в одно пространство.

Например:

A &#160;&#160;&#160;&#160;&#160; B приводит к: A B

A &#32;&#32;&#32;&#32;&#32; B приводит к: A B

Чтобы преобразовать символ &#160; с символом &#32; в строку, попробуйте следующее:

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

Для людей в будущем, подобных мне, которые должны были отлаживать это с высокого уровня вплоть до кодов символов, я приветствую вас.

Ответ 3

На самом деле это не ответ на вопрос, а инструмент, который можно использовать для обнаружения этого специального пробела в html страниц веб-сайта, чтобы мы могли его найти и удалить.

Инструмент, что в основном делает:

  • Выбирает содержимое URL
  • Ищет вхождения chr(194).chr(160) в содержимом HTML
  • Заменяет и выделяет окопания чем-то более заметным.

Таким образом, вы действительно можете знать, где находятся пробелы и правильно редактировать свою страницу, чтобы удалить их.

Онлайн-версию инструмента можно найти здесь:

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

Рабочий пример можно увидеть с URL-адресом этого вопроса, который содержит одно вхождение:

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

Там есть репозиторий Github, если кто-то хочет, чтобы код выполнял его локально:
https://github.com/HeavyDots/nbsp-space-char-detect

Надеюсь, что кто-то посчитает это полезным, для любой обратной связи есть раздел комментариев на странице инструмента.

Обновлено 5 января 2017 года

В блоге нашей компании мы просто написали смешную статью об этом раздражающем белом пространстве. Вам предлагается зайти и прочитать его!:-)

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

Ответ 4

Это не сломанное пространство. &nbsp; - это объект, используемый для представления неразрывного пространства. Это, по сути, стандартное пространство, основное отличие состоит в том, что браузер не должен разорвать (или обернуть) строку текста в точке, в которой находится этот &nbsp;.

Скорее всего, этот символ вставляется в ваш HTML-редактор. Не могли бы вы привести более конкретный пример в контексте?

Ответ 5

Как отмечалось в предыдущих ответах, это неразрывное пространство (nbsp). На Маках этот символ вставлен, когда вы случайно нажимаете Alt + Space (в большинстве случаев это происходит при вводе кода, для которого требуется Alt для специальных символов, например [ на раскладке на немецком языке).

Чтобы переназначить эту комбинацию клавиш на простой символ "SPACE", вы можете изменить свой ключевой привязку по умолчанию, как предлагается на Apple SE