2009-07-01 2 views
30

У меня есть странная проблема: где-то в моем коде HTML/PHP есть скрытый, невидимый персонаж, от которого я не могу избавиться. Скопировав его из Firebug и преобразовывая его, я определил его как  или «Zero width no-break space». Он отображается как не пустой текстовый узел на моем веб-сайте и вызывает серьезную проблему с макетом.Чистые файлы исходного кода невидимых символов

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

Какие-нибудь хорошие инструменты для поиска символов по коду через файлы или что-то в этом роде? (Mac OS X)

+0

Не обвиняйте себя слишком много. Если макет ломается из-за неразрывного пространства с нулевой шириной, визуализатор неправильно понимает серо-ширину или неразрывную часть. – MSalters

+2

Это спорно, я полагаю. Неразрывное пространство соединяло два правильных пробельных символа, поэтому оно должно отображать что-то, что я предполагаю. И что-то случилось, что он был зажат между двумя полноразмерными, безграничными DIV, поэтому он проявился очень заметно. Я скорее обвиняю Microsoft в том, что вы изобретали спецификации. ;-) – deceze

ответ

35

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

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

В googleing, кажется, что TextWrangler имеет режим «UTF-8, no BOM». В противном случае, если вам удобно с терминалом, вы можете использовать Vim:

:set nobomb 

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

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

Приветствия,

+0

Теперь это объяснило бы, но никакого оскорбления не было. Странно, что он переводится в правильный символ в браузере. Я буду искать это ... – deceze

+3

Извините, «вы этого не понимаете» не было оскорблением, оно должно заканчиваться в запятой. Мои извинения! – Boldewyn

+0

Да, это действительно так. Интересно, откуда это взялось, поскольку мой редактор (TextMate) не сохраняет спецификации ... – deceze

1

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

+1

Как уже говорилось, я больше ищу инструмент Mac OS X (или UNIX). – deceze

+0

yep я пропустил это ... я думаю, что видел некоторые, где его можно запустить с помощью кроссовера. не довольно решение, хотя –

+0

Btw: Notepad ++ имеет возможность сохранять файлы Unicode без спецификации. На всякий случай вы перейдете на Windows ;-) – Boldewyn

1

VI или VIM будут отображаться символы без EOL.

+0

Все, что может искать файлы? Я уже просмотрел все места, в которых я подозревал. – deceze

+0

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

+0

У вас слишком много опыта работы с grep, это будет правильное использование? kk: trunk deceze $ grep -R '/ \ xFEFF /'. – deceze

2

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

См. .

5

Это byte-order mark. В Mac OS X: открытое окно терминала, перейдите к источникам и типу:

grep -rn $'\xFEFF' * 

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

+0

Поскольку это почти наверняка первые два байта файла, проблема в том, чтобы его убрать. Я не очень разбираюсь в awk, но он должен быть однострочным с ним, чтобы удалить первые два байта файла. – Boldewyn

9

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

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

Это работает для меня каждый раз.

-3
  1. Вставить содержимое в Notepad ++
  2. В меню Кодировка -> Преобразовать в ANSI

И вы хорошо идти.

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/18183350) – phuzi

Смежные вопросы