Что это за космический персонаж 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]()
Ответы
Ответ 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, классическое пространство  
. В то время как copiedSpace.charCodeAt(0)
возвращает 160, символ  
AKA
.
Разница между ними состоит в том, что целая куча  
, повторяемая один за другим, будет удерживать свое место и создавать дополнительное пространство между ними, тогда как целая группа повторяющихся символов  
будет сжиматься вместе в одно пространство.
Например:
A       B
приводит к: A B
A       B
приводит к: A B
Чтобы преобразовать символ  
с символом  
в строку, попробуйте следующее:
.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
Это не сломанное пространство.
- это объект, используемый для представления неразрывного пространства. Это, по сути, стандартное пространство, основное отличие состоит в том, что браузер не должен разорвать (или обернуть) строку текста в точке, в которой находится этот
.
Скорее всего, этот символ вставляется в ваш HTML-редактор. Не могли бы вы привести более конкретный пример в контексте?
Ответ 5
Как отмечалось в предыдущих ответах, это неразрывное пространство (nbsp). На Маках этот символ вставлен, когда вы случайно нажимаете Alt + Space (в большинстве случаев это происходит при вводе кода, для которого требуется Alt для специальных символов, например [
на раскладке на немецком языке).
Чтобы переназначить эту комбинацию клавиш на простой символ "SPACE", вы можете изменить свой ключевой привязку по умолчанию, как предлагается на Apple SE