Intereting Posts
Вложенные объекты Symfony 3.0 не сохраняются PHP с использованием CURL: есть ли способ эмулировать куки-файл вместо сохранения его в файл? PHP веб-сервер в PHP? Замена глобальных переменных, как и почему Как включить автозаполнение / синтаксис для основных функций PHP в Eclipse? использование виртуальных полей для суммирования значений в cakephp Сессия не установлена? Вход в Symfony Не работает PHP call_user_func с классом и аргументами Как сохранить / перенаправить вывод команды Laravel Artisan? Выберите последний 20-й порядок по возрастанию – PHP / MySQL PHP / MYSQL – Подготовленные утверждения MySQLi – Можно использовать bind_param для ORDER BY? (упорядочение набора результатов) Обновить конфигурационный файл воспламенителя кода при установке CORS не работает php Карты Google – панорамирование и масштабирование по областям – маркеры не появляются при увеличении или панорамировании – ПОМОЩЬ!

PHP и HTML5: декларация документа UTF-8 с тегом <meta> или через функцию header ()?

Я пытаюсь оптимизировать способ создания фреймворков HTML5. Прямо сейчас, я должен вставить <meta charset="utf-8"/> сразу после <head> , так что это первый элемент, который нужно указать (поэтому, когда я передаю <title> а остальное элементов страницы, он уже определен как кодированный в UTF-8).

Проблема в том, что я читаю несколько книг по оптимизации производительности сайта, и большинство из них рекомендует указывать кодировку с помощью объявления Content-type , а не вставлять блок <meta> .

Документация W3C по обнаружению кодировки символов (раздел 8.2.2.1) говорит, что, по существу, заголовки HTTP имеют приоритет над любым явным объявлением EXCEPT, если пользователь объявляет переопределение для типа контента через пользовательский агент.

Тем не менее, валидатор W3C (именно поэтому я использую для отладки вывода моего кода HTML) не жалуется, но предупреждает меня об отсутствии блока <meta charset="utf-8"/> , таким образом, поощряя его поместить его ( он говорит, что особенно рекомендуется, чтобы отображаемая страница была сохранена, что не так, но все же … меня это немного смущает).

Вопрос в том, как … я могу гарантировать, что страницы ВСЕГДА указаны в кодировке UTF-8? Должен ли я объявлять заголовок HTTP и <meta> или только HTTP-заголовок?

Я не мог описать это лучше, чем: Дорога к HTML 5: кодировка символов

это 7-ступенчатый алгоритм; шаг 4 имеет 2 подэтапа, первый из которых имеет 7 ветвей, один из которых имеет 8 подэтапов, один из которых на самом деле ссылается на отдельный алгоритм, который сам имеет 7 шагов … Это продолжается на некоторое время , Суть его в том,

  • Пользователь переопределяет. – Вы не имеете никакого влияния на этот
  • Параметр «charset» HTTP в поле «Content-Type». В PHP-коде, который:

     header('Content-Type: text/html;charset=UTF-8'); 
  • Пометка байтового знака перед любыми другими данными в самом документе HTML. – Я не могу предложить использовать эту функцию. Если вам нравится, просто сохраните файлы соответственно, но не ожидайте, что вызовы header() работать безупречно. Альтернативой является вывод спецификации вручную, в PHP:

     echo "\xEF\xBB\xBF"; # UTF-8 BOM 

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

  • Объявление META с атрибутом «charset». – Пожалуйста, сделайте это, это хорошая практика. В HTML 5, который:

     <meta charset="UTF-8"> 
  • Объявление META с атрибутом «http-equiv», установленным в «Content-Type» и значением, установленным для «charset». – Почему нет?! В HTML 5, который будет:

     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 
  • Неопределенный эвристический анализ. – Вы не имеете никакого влияния на это.

Это те моменты. Моя рекомендация следующая:

  • Проверьте, что ваш веб-сервер отправляет правильные заголовки при обслуживании HTML.
  • Добавьте свой HTML и эти метатеги, чтобы можно было сохранить файл HTML на диске и открыть его позже в браузере (в автономном режиме, в архиве).
  • Не помещайте BOM внутри документа, если вы используете UTF-8.
  • Не используйте UTF-16 или UTF-32, если вы используете Unicode, используйте UTF-8.

Если вы нацеливаете системы, которые совершенно не знакомы с кодировками, используйте US-ASCII и замаскируйте все остальное, не входящее в него как объекты HTML.

Примечание. Это предложение подразумевает вывод в браузер, а не для хранения, хранение – это то, что попадает в вашу область, чтобы вы знали о кодировках, когда вы обрабатываете свой магазин. Никогда не используйте HTML-объекты, например, когда вы пишете HTML в свою базу данных mysql, когда вам это действительно не нужно (например, &amp; в HTML-ссылках).