注意が必要なコーディング方法はありますか?
この投稿は shendaowu によって最終編集されました: 2013-04-06 19:11:46
長い間 Web デザインに携わってきたので、コーディング方法に関連する多くのことに遭遇しました。しかし、今日また文字化けに遭遇し、幸いにも検索した結果解決しました。
エンコードについて私が知っていることは次のとおりです:
1.
(このページのデコード方法をブラウザに通知します)
2.
文書保存時のエンコード方式
3.
データベースのエンコード方式 (データベースまたはテーブルの定義時に設定)
4.
SQL文のエンコード方式(「SET NAMES UTF8」で設定)
最後のエンコーディングは何で決まるのでしょうか?この場合:
静的ページはテキスト データ フレームを通じてデータを収集し、get メソッドを通じて別の PHP ページにデータを送信し、そのデータを挿入ステートメントに入れて SQL ステートメントを実行します。
このとき、このクエリ文のエンコード方法は何で決まるのでしょうか?静的ページのエンコード方法ですか、それとも動的ページのエンコード方法ですか、それとも他のものですか?とりあえず、UTF-8にしてみたら文字化けもせずに挿入できました。しかし、問題は、すべての挿入で「SET NAMES UTF8」設定を使用する必要があることです。SQL ステートメントのデフォルトのエンコード方式として UTF8 を設定するにはどうすればよいでしょうか。
他にエンコード方法に注意する必要がある部分はありますか?
-----解決策--------------------------------すべての「エンコード方法」は出力ページに基づいています
mysql には適応型「エンコーディング」関数があります (他のデータベースについては明らかではありません)。つまり、返すように要求されたエンコーディングを返します
-----解決策----- ---------------原則: エンコーディングの問題は、ほぼすべての IO で考慮する必要があります
システム/Webサーバーとphp自体は2つのコードであるため、php自体のロードは1回です
PHP 出力、クライアント システム/ブラウザー、および出力文字は 2 つのエンコーディングです
ファイルの読み取りと書き込み、データベースの読み取りと書き込み、インクルード...など
------解決策--------------------- ----------- 見落とされがちなその他の事項
クッキー、これはありそうにありませんが、注意する必要があります
セッションでは、エンコーディングが異なる 2 つの PHP が同じセッションを使用する状況をテストしていません。
を試してみてください。
送受信 (curl、socket、API など)
他の言語と対話する
……