検索

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

常に UTF-8 エンコードを使用する

<p> 新しいサーバーをセットアップしており、Web アプリケーションで UTF-8 を完全にサポートしたいと考えています。以前に既存のサーバーでこれを試したことがありますが、常に ISO-8859-1 にフォールバックする必要があるようでした。 <br />エンコーディング/文字セットはどこで設定する必要がありますか?これを実現するには、Apache、MySQL、PHP を構成する必要があることはわかっています。参照したり、不一致のトラブルシューティングを行ったりできる標準チェックリストはありますか? <br />これは、MySQL 5、PHP 5、および Apache 2 を実行する新しい Linux サーバーです。 <br /></p><p><br /></p>
P粉548512637P粉548512637496日前491

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

  • P粉138871485

    P粉1388714852023-07-25 16:40:26

    Chazomaticus の優れた回答に追加したいと思います:

    META タグ (このような、または HTML4 または XHTML バージョン) も忘れないでください:

    リーリー

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

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

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


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

    W3C には実際、国際化 (I18N) 問題に特化したかなりのセクションがあります。この問題に関連し、HTTP、(X)HTML、CSS をカバーする記事が多数あります:

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

  • P粉381463780

    P粉3814637802023-07-25 09:11:32

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

    データベース内のすべてのテーブルとテキスト列に utf8mb4 文字セットを指定します。このようにして、MySQL は、UTF-8 のネイティブ エンコーディングで値を物理的に保存および取得します。 utf8mb4_* 照合順序が (明示的な文字セットなしで) 指定されている場合、MySQL は暗黙的に utf8mb4 エンコーディングを使用することに注意してください。

    • MySQL の古いバージョン (<5.5.3) では、Unicode 文字のサブセットのみをサポートする単純な utf8 を使用する必要がありました。これは残念ですが、それは事実です。

    • ######データアクセス###:###

    • アプリケーション コード (PHP など) では、使用するデータベース アクセス方法に関係なく、接続文字セットを utf8mb4 に設定する必要があります。このようにして、MySQL がアプリケーションにデータを渡すとき、ネイティブ UTF-8 からの変換、またはその逆の変換は行われません。

    一部のドライバーは、接続文字セットを構成するための独自のメカニズムを提供します。これにより、ドライバー自体の内部状態が更新され、接続で使用するエンコーディングが MySQL に通知されます。通常、これが推奨されるアプローチです。 PHP の場合:

    • PHP 5.3.6 以上の PDO 抽象化レイヤーを使用している場合は、DSN で文字セットを指定できます:

      リーリー
    • mysqli を使用している場合は、set_charset():

      を呼び出すことができます。 リーリー
      • 通常の mysql 関数しか使用できないが、PHP 5.2.3 以上を実行している場合は、mysql_set_charset メソッドを呼び出すことができます。

      • ドライバーが接続文字セットを設定する独自のメカニズムを提供していない場合は、アプリケーションが接続上のデータをどのようにエンコードするかを MySQL に伝えるクエリを発行する必要がある場合があります: SET NAMES 'utf8mb4' 。
      • 上記と同じ考慮事項が utf8mb4/utf8 にも当てはまります。
    • ######出力###:###

      UTF-8 は、HTTP ヘッダーに設定する必要があります (例: Content-Type: text/html; charset=utf-8)。これを行うには、php.ini でdefault_charset を設定するか (推奨)、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
  • キャンセル返事