PHP の header() 関数は、PHP ページのエンコーディングを定義するために使用されます (注: 前に出力を置くことはできません。そうしないと、エラーが報告されます)
PHP ページは utf8 でエンコードされています: header("Content-type: text/html; charset=UTF-8");
phpページはgbkでエンコードされています: header("Content-type: text/html; charset=GBK");
PHPページのエンコーディングを実装するためにヘッダーを使用するかメタを使用するかの違い
1. ページのエンコード
1. タグを使用してページエンコーディングを設定します
このタグの目的は、クライアントのブラウザがページを表示するために使用する文字セットエンコーディングを宣言することです。xxx には、GB2312、GBK、UTF-8 (MySQL とは異なります。UTF8) などを指定できます。したがって、ほとんどのページはこのメソッドを使用して、このページを表示するときに使用するエンコーディングをブラウザーに指示し、エンコーディング エラーや文字化けを回避できます。しかし、場合によっては、この文がどの xxx であっても機能しないことがわかります。この状況については後ほど説明します。
これは HTML 情報に属し、サーバーが HTML 情報をブラウザーに渡したことを示す単なるステートメントであることに注意してください。
2. header("content-type:text/html; charset=UTF-8") 関数を使用してページのエンコーディングを設定します
この関数 header() の機能は、括弧内の情報を http ヘッダーに送信することです。
カッコ内の内容が記事に記載されている通りであれば、基本的にはラベルと同じ機能であることが分かります。ただし、違いは、この機能がある場合、ブラウザは常に要求された xxx エンコーディングを使用し、決して従わないことです。そのため、この機能は非常に便利です。
これはなぜでしょうか? 次に、HTTPS ヘッダーと HTML 情報の違いについて話さなければなりません:
httpsヘッダーは、HTTPプロトコルを使用してブラウザにHTML情報を送信する前にサーバーによって送信される文字列です。
metaタグはhtml情報に属するため、header()で送信した内容が最初にブラウザに届きますが、metaよりもheader()の方が優先されるのが人気のポイントです。 header("content-type:text/html; charset=xxx") と header("content-type:text/html; charset=xxx") の両方を持つ PHP ページを追加すると、ブラウザは前の http ヘッダーのみを認識します。メタではありません。もちろん、この関数は PHP ページ内でのみ使用できます。
単一のスペースであっても前に出力を置くことはできません。そうしないと、エラーが報告されます:
警告: ヘッダー情報は変更できません - ヘッダーは既に C:wampwwwtest.php の 3 行目 (C:wampwwwtest.php:2 で開始された出力) によって送信されています
2. データベースのエンコード
PHP プログラムはデータベースにクエリを実行する前に、まず mysql_query("SET NAMES xxxx"); を実行します。ここで、xxxx は Web ページのエンコーディングです (charset=xxxx)。Web ページに charset=utf8 がある場合、xxxx=utf8、 Web ページに charset=gb2312 、 xxxx=gb2312 がある場合、ほとんどすべての WEB プログラムにはデータベースに接続するための共通コードがあり、このファイルに mysql_query (「set names」) を追加するだけです。
SET NAMES は、クライアントから送信された SQL ステートメントでどのような文字セットが使用されているかを示します。したがって、SET NAMES 'utf-8' ステートメントはサーバーに、「このクライアントからの今後の情報では文字セット utf-8 が使用される」ことを伝えます。また、サーバーがクライアントに送り返す結果の文字セットも指定します。 (たとえば、SELECT ステートメントを使用する場合、列の値にどの文字セットが使用されるかを示します。)
3. PHPページのコーディングを統一
MySQL データベースのエンコーディング、HTML ページのエンコーディング、PHP または HTML ファイル自体のエンコーディングはすべて一貫している必要があります。
1. MySQL データベースのエンコーディング: データベースの作成時にエンコーディングを指定します (gbk_chinese_ci など)。データ テーブル、フィールドの作成時、データの挿入時にエンコーディングを指定しないでください。データベースのエンコーディングが自動的に継承されます。
データベースに接続するときは、エンコーディングもあります。データベースに接続した後、mysql_query('SET NAMES gbk');//gbk を utf8 などのエンコーディングに置き換えます。
2. HTML ページのエンコーディングは、次の行の設定を参照します:
3. PHP または HTML ファイル自体のエンコーディング: editplus を使用して php ファイルまたは HTML ファイルを開きます。データベースとページのエンコーディングが gbk の場合、ここでのエンコーディングはデータベースの場合は ansi を選択します。ページのエンコーディングが utf-8 である場合、ここでも utf-8 が選択されます。
4. もう 1 つの注意点は、JavaScript または Flash で渡されるデータが utf-8 でエンコードされている場合、データベースとページのエンコードが gbk である場合は、トランスコードしてからデータベースに書き込む必要があることです。 iconv('utf-8', 'gbk', $content);
5. PHP プログラムでは、PHP ソース プログラムのエンコーディングを指定する行を追加できます: header('Content-type: text/html; charset=gbk');
4. コード化された文字の大文字と小文字の違い
(mysqlのみ、その他の場所では大文字のUTF-8、GBK、GB2312を使用することをお勧めします)
「utf-8」のエイリアス「utf8」はMySQL内でのみ使用できますが、それ以外の場所では必ず大文字の「UTF-8」を使用してください。具体的には、コマンド「mysql_query(set names utf8)」の外側では常に大文字の「UTF-8」を使用してください。