Как я могу очистить файлы исходного кода от невидимых символов?

У меня странная проблема: где-то в моем коде HTML / PHP есть скрытый, невидимый символ, от которого я не могу избавиться. Скопировав его из Firebug и преобразовав, я определил его как  или «Беспрерывное пространство нулевой ширины». На моем веб-сайте он отображается как непустой текстовый узел и вызывает серьезные проблемы с макетом.

Проблема в том, что я не могу от этого избавиться. Я не вижу этого в своих файлах, даже когда включаю невидимки (да). Кажется, я не могу его найти, похоже, ни один поисковый инструмент не улавливает его. Я переписал свой код там, где он мог быть, но, похоже, он где-то глубже в одном из файлов фреймворка.

Как я могу найти символы с помощью кодировки в файлах или что-то в этом роде? Я открыт для разных инструментов, но они должны работать в Mac OS X.


person deceze♦    schedule 01.07.2009    source источник
comment
vi или vim будут отображать любые символы, отличные от EOL.   -  person Matthew Scharley    schedule 01.07.2009
comment
Я почти уверен, что Textwrangler сделает это. РЕДАКТИРОВАТЬ: ссылка VersionTracker, поскольку сайт Bare Bones, похоже, снова не работает.   -  person da5id    schedule 01.07.2009
comment
Не вини себя слишком сильно. Если макет разрывается из-за неразрывного пространства нулевой ширины, средство визуализации неправильно понимает либо сероширину, либо неразрывную часть.   -  person MSalters    schedule 02.07.2009
comment
Полагаю, это спорно. Неразрывный пробел соединял два правильных символа пробела, поэтому я предполагаю, что он должен что-то рендерить. И это что-то произошло между двумя полноразмерными DIV без полей, поэтому оно появилось очень заметно. Я скорее виню Microsoft в том, что изначально она изобрела спецификации. ;-)   -  person deceze♦    schedule 03.07.2009
comment
Исправлены некоторые простые ответы и отредактированы. Выглядит по теме без явного запроса инструмента   -  person Machavity♦    schedule 24.05.2021


Ответы (5)


Вы не можете увидеть символ в редакторе, потому что вы не можете найти его в текстовых редакторах. #FEFF или #FFFE - это так называемые метки порядка байтов. Это изобретение Microsoft, позволяющее указать в файле Unicode, в каком порядке хранятся многобайтовые символы.

Чтобы избавиться от него, попросите своего редактора сохранить файл как ANSI / ISO-8859 или как Unicode без спецификации. Если ваш редактор не может этого сделать, вам придется либо переключить редакторы (к сожалению), либо использовать какой-то инструмент усечения, например, шестнадцатеричный редактор, который позволяет вам увидеть, как файл на самом деле выглядит.

При поиске в Google кажется, что TextWrangler имеет UTF-8, без режима спецификации. В противном случае, если вам нравится терминал, вы можете использовать Vim:

:set nobomb

и сохраните файл. Престо!

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

person Boldewyn    schedule 01.07.2009
comment
Я видел это раньше, но обычно это отображалось как мусор вверху страницы. Кажется, его труднее найти, когда он находится посередине страницы ...? В любом случае, спасибо! :) - person deceze♦; 01.07.2009
comment
Это может произойти в середине страницы, когда вы используете оператор PHP include с файлом, запускаемым спецификацией, для включения. В противном случае он обычно не должен отображаться (хотя это стандартный символ Unicode и может использоваться как таковой). - person Boldewyn; 01.07.2009
comment
Если вы редактируете свой код HTML / PHP с помощью Altova XMLSpy, то параметр отключения спецификации находится в меню Инструменты / Параметры, закладка Кодировка. XMLSpy может сохранить спецификацию, если найдет, или добавить в файл, если он еще не существует. У него нет возможности удалить спецификацию. - person Wim ten Brink; 01.07.2009
comment
Ой, ой. Я почему-то сомневаюсь, что вы используете XMLSpy в Mac OS X, хотя его можно установить в Mac OS X с помощью виртуализации Parallels для Mac. - person Wim ten Brink; 01.07.2009

Если вы используете Textmate и проблема в файле UTF-8:

  1. Открыть файл
  2. Файл> Открыть заново с кодировкой> ISO-8859-1 (Latin1)
  3. Вы должны увидеть и удалить первый символ в файле
  4. Файл> Сохранить
  5. Файл> Открыть снова с кодировкой> UTF8
  6. Файл> Сохранить

У меня это срабатывает каждый раз.

person Mirko    schedule 21.06.2010

Это знак порядка байтов. В Mac OS X: откройте окно терминала, перейдите к своим источникам и введите:

grep -rn $'\xFEFF' *

Он покажет вам номера строк и имена файлов, содержащих спецификацию.

person Vexatus    schedule 01.07.2009
comment
Поскольку это почти наверняка первые два байта файла, проблема в том, чтобы избавиться от него. Я не очень разбираюсь в awk, но он должен быть однострочным, чтобы удалить первые два байта файла. - person Boldewyn; 01.07.2009
comment
В самом деле, нетрудно найти повторяющиеся вопросы, которые покажут вам, как именно это делать. awk 'NR==1 { sub(/^\357\273\277/, "") } 1' file >newfile - person tripleee; 24.05.2021

В Notepad ++ есть возможность отображать все символы. В верхнем меню:

Просмотр - ›Показать символ -› Показать все символы

person Umair Ahmed    schedule 01.07.2009
comment
Как уже говорилось, я больше ищу инструмент для Mac OS X (или UNIX). - person deceze♦; 01.07.2009
comment
да, я пропустил это ... я думаю, что видел кое-где, где его можно запустить с помощью Crossover. не очень хорошее решение - person Umair Ahmed; 01.07.2009
comment
Кстати: Notepad ++ имеет возможность сохранять файлы Unicode без спецификации. На всякий случай перейдешь на Windows ;-) - person Boldewyn; 01.07.2009
comment
Я запускаю блокнот ++ на Ubuntu, используя вино. Я не знаю, работает ли вино на OS X. Но блокнот ++ - это круто. - person Randy L; 13.08.2010
comment
Я не думаю, что в блокноте плюс плюс будет отображаться `` без пробела '' и другие символы пробелов, хотя он будет показывать возврат каретки и перевод строки ... Я думаю, вам нужно переключить кодировку, которая объясняется в принятом ответе - person ClearBlueSky85; 05.05.2016

Я не пользователь Mac, но мой общий совет: когда ничего не помогает, используйте шестнадцатеричный редактор. Очень полезно в таких случаях.

См. «Сравнение шестнадцатеричных редакторов» в WikiPedia.

person Craig McQueen    schedule 01.07.2009
comment
Даже среди ответов на вопросы о запросах инструментов этот не особенно полезен, поскольку он не заходит так далеко, чтобы предлагать решение или даже инструмент, а только категорию инструментов. - person TylerH; 24.05.2021