2

フレームワークがHTML5ページの生成を処理する方法を最適化しようとしています。現在、私が行っているのはタグの<meta charset="utf-8"/>直後に挿入することです<head>。これが最初に指定される要素です(したがって、<title>タグと残りのページ要素を渡すと、UTF-8でエンコードされていると既に定義されています)。

問題は、Webサイトのパフォーマンスの最適化に関する本を読んでいることです。それらのほとんどは、ブロックContent-typeを挿入するのではなく、宣言を通じてエンコードを指定することを推奨しています。<meta>

文字エンコードの検出に関するW3Cのドキュメント(セクション8.2.2.1)には、ユーザーがユーザーエージェントを介してコンテンツタイプのオーバーライドを宣言した場合を除いて、基本的にHTTPヘッダーが明示的な宣言よりも優先されると記載されています。

ただし、W3Cバリデーター(HTMLコード出力のデバッグに使用する理由)は文句を言わず、ブロックがないことを警告するため、<meta charset="utf-8"/>ブロックを配置するように促します(レンダリングされたページが保存されますが、そうではありませんが、それでも...少し混乱します)。

問題は...ページが常にUTF-8でエンコードされたものとして指定されていることを確認するにはどうすればよいですか?HTTPヘッダーと<meta>タグを宣言する必要がありますか、それともHTTPヘッダーだけを宣言する必要がありますか?

4

1 に答える 1

5

私はそれをよりよく説明することができませんでした:HTML 5への道:文字エンコーディング

これは7ステップのアルゴリズムです。ステップ4には2つのサブステップがあり、最初のサブステップには7つのブランチがあり、そのうちの1つには8つのサブステップがあり、そのうちの1つは実際には7つのステップを持つ別のアルゴリズムにリンクしています...しばらくの間そのように続きます。その要点は

  • ユーザーオーバーライド。-これには影響しません
  • 「Content-Type」フィールドのHTTP「charset」パラメータ。PHPコードでは、次のようになります。

    header('Content-Type: text/html;charset=UTF-8');
    
  • HTMLドキュメント自体の他のデータの前のバイト順マーク。-実際にその機能を利用することを提案することはできません。必要に応じて、それに応じてファイルを保存しますが、header()呼び出しが問題なく機能することを期待しないでください。別の方法は、PHPでBOMを手動で出力することです。

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

    しかし、それでも、これは出力の後方互換性のない変更であるため、BOMを出力することをお勧めすることはできませ。これらのガイドラインは読み取り用であり、出力用ではありません。

  • 「charset」属性を持つMETA宣言。-そうしてください、これは良い習慣です。HTML 5では、次のようになります。

    <meta charset="UTF-8">
    
  • 「http-equiv」属性が「Content-Type」に設定され、値が「charset」に設定されたMETA宣言。- なぜだめですか?!HTML 5では、次のようになります。

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    
  • 不特定のヒューリスティック分析。-これには影響しません。

それがポイントです。私の推奨事項は次のとおりです。

  • HTMLを提供するときに、Webサーバーが正しいヘッダーを送信していることを確認してください。
  • HTMLファイルとそれらのメタタグを用意して、HTMLファイルをディスクに保存し、後でブラウザ(オフライン、アーカイブ)で開くことができるようにします。
  • UTF-8を使用している場合は、ドキュメント内にBOMを配置しないでください。
  • UTF-16またはUTF-32は使用しないでください。Unicodeを使用する場合は、UTF-8を使用してください。

エンコーディングをまったく認識していないシステムをターゲットにしている場合は、US-ASCIIを使用し、その一部ではない他のすべてをHTMLエンティティとしてマスクします。

注:この提案は、ブラウザへの出力用であり、保存用ではありません。保存はお住まいの地域に該当するものです。ストアを処理するときは、エンコーディングに注意してください。たとえば、HTMLエンティティを本当に必要としないときにmysqlデータベースに書き込む場合(&amp;HTMLリンクなど)は、HTMLエンティティを使用しないでください。

于 2012-08-05T21:08:57.517 に答える