ホームページ  >  に質問  >  本文

最初から最後まで UTF-8 を採用

新しいサーバーをセットアップしており、Web アプリケーションで UTF-8 を完全にサポートしたいと考えています。過去に既存のサーバーでこれを試してみましたが、常に最終的に ISO-8859-1 にフォールバックする必要があるようでした。

エンコーディング/文字セットは正確にどこで設定する必要がありますか?これを行うには、Apache、MySQL、および PHP を構成する必要があることはわかっています。従うことができる標準的なチェックリストはありますか、または不一致が発生した場合のトラブルシューティングは可能ですか?

これは、MySQL 5、PHP、5、および Apache 2 を実行する新しい Linux サーバーに適用されます。

P粉925239921P粉925239921390日前817

全員に返信(2)返信します

  • P粉482108310

    P粉4821083102023-10-16 00:11:18

    chazomaticus の素晴らしい回答 に 1 つ追加したいことがあります:

    META タグ (これ、または その HTML4 または XHTML バージョン など):

    も忘れないでください。 リーリー

    これは些細なことのように思えるかもしれませんが、IE7 では以前にも問題が発生しました。

    すべて正しく行っています。データベース、データベース接続、および Content-Type HTTP ヘッダーはすべて UTF-8 に設定されており、他のすべてのブラウザでは正常に動作しますが、Internet Explorer は依然として「西ヨーロッパ言語」を使用することを要求します。エンコーディング。

    ページに META タグが欠落していることが判明しました。それを追加すると問題が解決します。

    ######編集:######

    W3C には実際には、I18N 専用のかなり大きな セクションがあります。この問題に関連する記事が多数あり、HTTP、(X)HTML、CSS の側面について説明しています:

    FAQ: (X)HTML ページのエンコードを UTF-8 に変更する

  • P粉457445858

    P粉4574458582023-10-16 00:05:39

    ######データストレージ###:###

    データベース内のすべてのテーブルとテキスト列に

    utf8mb4
      文字セットを指定します。これにより、MySQL は、UTF-8 でネイティブにエンコードされた値を物理的に保存および取得できるようになります。
    • utf8mb4_*

      照合順序が (明示的な文字セットなしで) 指定されている場合、MySQL は暗黙的に utf8mb4 エンコーディングを使用することに注意してください。 MySQL の古いバージョン (5.5.3 未満) では、残念ながら、Unicode 文字のサブセットのみをサポートする

      utf8
    • のみを使用する必要があります。冗談だったらよかったのに。
    • < 5.5.3) 中,不幸的是,您将被迫仅使用 ######データアクセス###:###

    • アプリケーション コード (PHP など) では、使用するデータベース アクセス方法に関係なく、接続文字セットを
    utf8mb4

    に設定する必要があります。こうすることで、MySQL がアプリケーションにデータを渡すときに、ネイティブ UTF-8 から変換したり、その逆の変換をしたりすることはありません。

    を設定するか (推奨)、

    header() 関数を手動で使用します。

    アプリケーションが他のシステムにテキストを転送する場合、文字エンコーディングも認識している必要があります。 Web アプリケーションの場合、データを送信するエンコーディングをブラウザーに (HTTP 応答ヘッダーまたは
      HTML メタデータ
    • 経由で) 伝える必要があります。 json_encode() を使用して出力をエンコードする場合は、2 番目のパラメーターとして JSON_UNESCAPED_UNICODE を追加します。 ######入力###:###
      • ブラウザはドキュメントで指定された文字セットのデータを送信するため、入力を特別に操作する必要はありません。
      • リクエストのエンコードに疑問がある場合 (改ざんされている可能性があるため)、受信した各文字列が有効な UTF-8 であることを確認してから、それを保存したりどこかに使用したりすることができます。 PHP の mb_check_encoding() は次のことを行います: トリックですが、忠実に使用する必要があります。悪意のあるクライアントは任意のエンコーディングでデータを送信できるため、これを回避する方法は実際にはありません。PHP にこれを確実に実行させるためのトリックはまだ見つかりません。

      その他のコードのメモ:

      • 明らかに、提供するすべてのファイル (PHP、HTML、JavaScript など) は有効な UTF-8 を使用してエンコードする必要があります。

      • UTF-8 文字列を処理するたびに、それが安全であることを確認する必要があります。残念ながら、これが最も難しい部分です。 PHP の mbstring 拡張機能を広範囲に使用するとよいでしょう。

      • デフォルトでは、PHP の組み込み文字列操作 は UTF-8 では 安全ではありません。 通常の PHP 文字列操作を使用して一部の操作 (連結など) を安全に実行できますが、ほとんどの場合、同等の mbstring 関数を使用する必要があります。

      • 自分が何をしているのかを知るには (台無しにしないでください)、UTF-8 とそれが可能な限り最低レベルでどのように動作するかを本当に理解する必要があります。知っておくべきことすべてに関する優れたリソースについては、utf8.com のリンクをチェックしてください。

      返事
      0
  • キャンセル返事