У меня есть страница xhtml, проверяющая под строгим типом xhtml, но я получаю это предупреждение, которое я пытаюсь понять, и исправляю.
Просто, как мне найти этот ошибочный "знак байтового заказа". Я редактирую файл с помощью Visual Studio - не уверен, что это помогает.
Ответ 1
Элемент местоположения вашего вопроса прост: знак байта (BOM) будет в самом начале файла.
При редактировании файла перейдите в File | Advanced Save Options...
и вы увидите раскрывающийся список "Кодировка" (вместе с раскрывающимся списком "Линейные окончания" ). Вероятно, он должен использовать "Unicode (UTF-8 с подписью) - Codepage 65001". Если вы прокрутите список вниз, вы можете найти "Unicode (UTF-8 без подписи) - Codepage 65001". Это должно сделать это (если хотите). Некоторые системы могут быть смущены спецификацией в файле UTF-8, как указывает предупреждение.
См. также это примечание на узле Unicode Часто задаваемые вопросы о файлах спецификации и UTF-8. Он не имеет никакой функции, кроме как вызывать, что файл является, по сути, UTF-8. В частности, он не влияет на порядок байтов (основная причина, по которой у нас есть спецификации), поскольку порядок байтов UTF-8 фиксирован.
Ответ 4
BOM иногда находится в тексте INSIDE, а не в начале - если файл был собран некоторое время php из других файлов, используя, например, include_once(). Чтобы удалить его, удалите область между по крайней мере одним символом перед спецификацией и по крайней мере одним символом после спецификации (на всякий случай). Положение спецификации можно найти в F12 Developer Tools Internet Explorer и, возможно, в Edge. Он визуализируется как черный алмаз/ромб.
Visual Studio и WebMatrix могут сохранять файлы с или без подписи (в начале).
BOM вызывает ошибки во время проверки (https://validator.w3.org/#validate_by_upload) или в консолях - </HEAD> можно рассматривать как осиротевший элемент без <HEAD> , когда, по-видимому, присутствует!:
Ошибка: Stray end tag head.
<BODY> как второй <BODY> , когда существует только один <BODY> и все правильно:
Ошибка: начало тега, но элемент того же типа уже был открыто.
И весь документ можно увидеть без DOCTYPE, когда BOM или две BOMS занимают первую строку, а DOCTYPE - во второй строке, с сообщением, аналогичным этому:
Ошибка: непространственные символы найдены, не видя сначала doctype. Ожидаемый, например. <! DOCTYPE html > .
Ошибка: головке элемента отсутствует требуемый экземпляр дочернего элемента в заголовке.
Ошибка: блуждающий doctype.
Ошибка: Stray start tag html.
Ошибка: Stray start tag head.
Ошибка: имя атрибута не разрешено в метатете элементов в этой точке.
Ошибка: в элементе meta отсутствует одно или несколько из следующих атрибуты: itemprop, свойство.
Ошибка: атрибут http-equiv не разрешен в метатете элементов в этой точке.
Ошибка: в элементе meta отсутствует одно или несколько из следующих атрибуты: itemprop, свойство.
Ошибка: имя атрибута не разрешено в метатете элементов в этой точке.
Ошибка: в элементе meta отсутствует одно или несколько из следующих атрибуты: itemprop, свойство.
Ошибка: ссылка элемента отсутствует требуемое свойство атрибута.
Ошибка: имя атрибута не разрешено в метатете элементов в этой точке.
Ошибка: в элементе meta отсутствует одно или несколько из следующих атрибуты: itemprop, свойство.
Ошибка: имя атрибута не разрешено в метатете элементов в этой точке.
Ошибка: в элементе meta отсутствует одно или несколько из следующих атрибуты: itemprop, свойство.
Ошибка: имя атрибута не разрешено в метатете элементов в этой точке.
Ошибка: в элементе meta отсутствует одно или несколько из следующих атрибуты: itemprop, свойство.
Ошибка: название элемента не разрешено как дочерний элемент тела элемента в этом контекст. (Подавление дальнейших ошибок из этого поддерева.)
Ошибка: стиль элемента не разрешен как дочерний элемент тела элемента в этом контекст. (Подавление дальнейших ошибок из этого поддерева.)
Ошибка: Stray end tag head.
Ошибка: начало тега, но элемент того же типа уже был открыто.
Неустранимая ошибка: невозможно восстановить после последней ошибки. Любые дальнейшие ошибки будут игнорировать.
(https://validator.w3.org/#validate_by_uri)
И поток сообщений в консоли разработчика IE F12:
HTML1527: ожидается DOCTYPE. Рассмотрим добавление допустимого типа HTML5: "<! DOCTYPE html > ".
HTML1502: Неожиданный DOCTYPE. Допускается только один DOCTYPE, и он должен встречаться перед любыми элементами.
HTML1513: найден тег "<html> ". Для каждого документа должен существовать только один тег <html> .
HTML1503: Неожиданный стартовый тег. HTML1512: Непревзойденный конечный тег.
Все, вызванное одной спецификацией в начале. И отладчик показывает один черный ромб в первой строке.
Файлы, сохраненные с сигнатурой, но не собранные php, не вызывают таких ошибок, и черные алмазы не допустимы в отладчике IE. Таким образом, возможно, PHP преобразует спецификацию. Кажется, что основной файл php должен быть сохранен с сигнатурой, чтобы увидеть это.
Эти странные символы встречаются в начале и/или на границах файлов, объединенных с include_once(), и не отображаются, когда файлы сохраняются ранее без подписи. Вот почему он указывает на участие в BOM.
Я заметил это все позавчера, когда начал конвертировать мой сайт в HTML5 и проверял.
BOM также может создать небольшой отступ в начале строки. Два файла, содержащие идентичный текст, но один с отступом.