ホームページ >バックエンド開発 >PHPチュートリアル >さまざまな php エンコーディング セットとそれらを使用する必要がある状況の詳細な説明
文字セットは複数の文字の集合であり、各文字セットには異なる数の文字が含まれています: ASCII 文字セット、GB2312 文字セット、GB 18030 文字セット。 、Unicode 文字セットなど。コンピューターがさまざまな文字セットのテキストを正確に処理するには、コンピューターがさまざまなテキストを認識して保存できるように文字エンコーディングが必要です。
中国語には多数の文字があり、また、簡体字中国語と繁体字中国語の異なる表記規則の 2 つの文字に分かれています。そのため、コンピューターは英語の 1 バイト文字に基づいて設計されています。そのため、中国語の文字をエンコードすることが重要です。中国の技術基盤。この記事では、いくつかの代表的な文字セットを文字セットの年代順に説明し、いくつかの代表的な漢字セットを選択し、その歴史的起源、特徴、および技術的特徴を検討します。
ASCII文字セット
1.名前の由来
ASCII(American Standard Code for Information Interchange、American Standard Code for Information Interchange)は、ローマ字に基づくコンピュータコーディングシステムです。
2. 特徴
主に現代英語やその他の西ヨーロッパ言語を表示するために使用されます。これは現在最も一般的なシングルバイトエンコードシステムであり、国際標準 ISO 646 と同等です。
3. コンテンツが含まれています
制御文字:Enterキー、バックスペース、改行キーなど。
表示できる文字:英語の大文字、小文字、アラビア数字、欧文記号
4. 技術的特徴
7ビットで1文字、合計128文字を表す
5. ASCII拡張文字セット
7 -bit エンコーディング ASCII の文字セットは 128 文字しかサポートできません。より一般的に使用されるヨーロッパ文字を表すために、ASCII 拡張文字セットは 8 ビットを使用して文字を表現し、合計 256 文字を使用します。
ASCII拡張文字セットによって拡張された記号には、表形式の記号、計算記号、ギリシャ文字、特殊なラテン文字などがあります。
GB2312 文字セット
1. GB2312 という名前の由来は、GB2312-80 文字セットとしても知られており、正式名称は「情報交換用中国語コード化文字セット基本セット」で、2016 年に旧中国国家標準局によって発行されました。 1981年5月 1月1日施行。
2. 特徴
GB2312は中国の国家標準の簡体字文字セットです。含まれる漢字は使用頻度の 99.75% をカバーしており、基本的に漢字のコンピュータ処理ニーズを満たしています。中国本土とシンガポールで広く使用されています。
3. 含まれるコンテンツ
GB2312には、簡体字中国語文字と一般記号、シリアル番号、数字、ラテン文字、日本語のかな、ギリシャ文字、ロシア文字、中国語のピンイン記号、中国語の表音文字、合計7445個のグラフィック文字が含まれています。これには、第 1 レベルの中国語 3,755 文字と第 2 レベルの中国語 3,008 文字を含む 6,763 の漢字が含まれており、ラテン文字、ギリシャ文字、日本語のひらがなおよびカタカナ文字、ロシア語のキリル文字を含む全角文字 682 文字が含まれています。
4. 技術的特徴
(1) パーティション表現:
GB2312 は収集された漢字を「パーティション」し、各ゾーンには 94 個の漢字/記号が含まれます。この表現は位置コードとも呼ばれます。
各エリアに含まれる文字は次のとおりです: エリア 01 ~ 09 は特殊記号、エリア 16 ~ 55 はピンイン順にソートされた第 1 レベルの漢字、および部首ごとにソートされた第 2 レベルの漢字です。ストローク、エリア 10 ~ 15 およびエリア 88 ~ 94 はコード化されていません。
(2) 2バイト表現
2バイトのうち最初のバイトが1バイト目、後半のバイトが2バイト目となります。通常、最初のバイトを「上位バイト」と呼び、2 番目のバイトを「下位バイト」と呼びます。
「上位バイト」は0xA1~0xF7(エリア01~87の市外局番に0xA0を加算)、「下位バイト」は0xA1~0xFE(0xA0に01~94を加算)を使用します。
5. エンコーディングの例
GB2312 文字セットの最初の漢字「あ」を例に挙げます。その市外局番は 16 で、ビット番号は 01 です。市外局番は 1601 です。バイトと下位バイトにそれぞれ0xA0を追加して、プログラムの漢字処理コード0xB0A1を取得します。計算式は0xB0=0xA0+16、0xA1=0xA0+1となります。
BIG5 文字セット
1. 名前の由来
Big Five または Big Five とも呼ばれ、1984 年に台湾情報産業評議会と 5 つのソフトウェア会社 Acer および MiTAC 、Jiajia、Zero One、および FIC によって開発されました。が創設されたのでビッグファイブと呼ばれています。
Big5 コードが作成されたのは、当時の台湾のさまざまなメーカーが、相互に互換性のない、Yitian コード、IBM PS55、湾岸コードなどの異なるコードを発売したためでした。一方、台湾政府は互換性を持っていませんでした。まだ公式の中国語文字コードを導入しており、中国本土の GB2312 エンコードにも繁体字中国語の文字は含まれていません。
2. 特徴
Big5 文字セットには、合計 13,053 個の漢字が含まれています。この文字セットは、台湾、中国で使用されています。興味深いのは、この文字セットに同じ 2 つの文字「兀」 (0xA461 と 0xC94A)、「?亍?0xDCD1 と 0xDDFC) が繰り返し含まれていることです。
3. 文字エンコード方式
Big5 コードは 2 バイトの保存方法を使用し、2 バイトを使用して単語をエンコードします。最初のバイトは「上位バイト」と呼ばれ、2 番目のバイトは「下位バイト」と呼ばれます。上位バイトのエンコード範囲は0xA1~0xF9、下位バイトのエンコード範囲は0x40~0x7E、0xA1~0xFEです。
各エンコード範囲に対応する文字の種類は次のとおりです: 0xA140 ~ 0xA3BF は句読点、ギリシャ文字、特殊記号です。さらに、0xA259 ~ 0xA261 には 2 音節の測定単位の単語が格納されます。 ??憝??; 0xA440-0xC67E は一般的に使用される漢字で、最初に画数、次に部首で並べ替えられます。0xC940-0xF9D5 は次によく使用される漢字で、最初に画数で並べ替え、次に部首で並べ替えます。
4.Big5の制限事項
Big5のコードには10,000文字以上が含まれていますが、社会で流通している人名、地名、方言、化学、生物学等は考慮されていません。日本語の平文文字とカタカナ文字が含まれます。
例えば、台湾では「朱」という言葉は「朱」の異体字とみなされ、「朱」という言葉は含まれません。康熙帝辞典の一部の部首(「亠」、「疒」、「?」、「?」など)、一般名(「?震伯ⅰ班陰伯ⅰ?唷伯ⅰ?」など) GB18030文字set
1. GB 18030 の正式名称は GB18030-2000「情報交換のための漢字エンコーディングの基本セットの拡張」です。これは中国政府の中国語文字エンコーディングの新しい国家標準であり、2000 年 3 月 17 日にリリースされました。 . 2001 年 8 月 31 日以降に中国市場でリリースされたソフトウェアは、この標準に準拠する必要があります
2. 特徴
GB 18030 文字セット標準の導入には、情報技術業界の著名な企業からの広範な参加とデモンストレーションが行われています。国内外で、情報産業省と旧国家品質技術監督局は共同で、漢字、日本語のかな、韓国語、および中国の少数民族文字で構成される大きな文字を解決するための GB 18030 文字セット標準を実装しました。コーディングの問題 この標準の合計文字エンコーディング スペースは、中国語、日本語、韓国語、および中国の少数言語をカバーする 27,484 文字を含む 150 万エンコーディング ビットを超えています。 東アジアにおける情報交換の要件には、多言語、大きなフォント サイズ、およびUnicode バージョン 3.0 とも互換性があり、Unicode 拡張文字語彙「Unified Chinese Character Extension A」の内容を満たしており、以前の各国文字エンコード標準 (GB2312 と互換性) と一致しています。 、GB13000.1)
3. エンコード方式
GB 18030 規格では、文字のエンコードに 1 バイト、2 バイト、4 バイトの 3 つの方式が使用されます。 ASCIIコードの対応するコード)、最初のバイトコードは0x81から0xFE、最後のバイトコードビットはそれぞれ0x40から0x7Eと0x80から0Xです。バイト部は、GB/T 11383 では使用されていない 0x30 ~ 0x39 を 2 バイトエンコード拡張のサフィックスとして使用します。拡張された 4 バイトエンコードの範囲は 0x81308130 ~ 0xFE39FE39 です。 1 バイト目と 3 バイトのエンコード コード ビットはすべて 0x81 ~ 0xFE、2 バイト目と 4 バイトのエンコード コード ビットはすべて 0x30 ~ 0x39 です
4. 含まれるコンテンツ
に含まれるコンテンツダブルバイト部分には、主に GB13000.1 の 20,902 個のすべての CJK 中国語文字、13 個の関連句読点、表意文字記述子、80 個の補助漢字と部首/コンポーネント、ダブルバイトでエンコードされたユーロ記号などが含まれます。このセクションには、 CJK 統一中国語文字拡張を含む、上記の 2 バイト文字を除く GB 13000.1 A. Unicode 文字セット
1. 名前の由来
Unicode 文字セットのエンコーディングは、-Octet Coded Character Set です。 Universal Multi-octet Coded Character Setの略で、今日世界中のさまざまな言語で書かれたテキストの交換、処理、処理をサポートするためにUnicode Consortiumと呼ばれる組織によって開発された文字コード化システムです。このエンコードは 1990 年に開発が開始され、1994 年に正式に発表されました。最新バージョンは 2005 年 3 月 31 日の Unicode 4.1.0 です。
2. 特徴
Unicodeはコンピュータで使われる文字コードです。各言語の各文字に統一された一意のバイナリ エンコーディングを設定し、言語間およびプラットフォーム間のテキスト変換と処理の要件を満たします。
3. エンコード方法
Unicode標準では常に16進数が使用され、書き込み時に先頭に「U+」が付けられます。たとえば、文字「A」のエンコードは004116、文字「?」のエンコードは20AC16です。 。したがって、「A」のエンコードは「U+0041」と記述されます。
4.UTF-8エンコーディング
UTF-8はUnicodeの使用方法の1つです。 UTF は Unicode Translation Format であり、Unicode を特定の形式に変換することを意味します。
UTF-8 は、ネットワークを使用して異なるコンピュータ間で異なる言語およびエンコーディングのテキストの送信を容易にし、シングルバイト処理を処理する既存のシステム上で 2 バイトの Unicode を正しく送信できるようにします。
UTF-8 では、Unicode 文字を格納するために可変長バイトを使用します。たとえば、ASCII 文字は引き続き 1 バイトを使用し、アクセント付き文字、ギリシャ文字、またはキリル文字は 2 バイトを使用しますが、一般的に使用される中国語文字は 3 文字を使用します。補助プレーン文字は 4 バイトを使用します。
5.UTF-16 と UTF-32 エンコーディング
UTF-32、UTF-16、UTF-8 は、Unicode 標準エンコーディング文字セットの文字エンコーディング スキームです。UTF-16 は、1 つまたは 2 つの未割り当ての 16 ビット A シーケンスを使用します。コード単位の数は Unicode コード ポイントをエンコードし、UTF-32 は各 Unicode コード ポイントを同じ値の 32 ビット整数として表します。
さまざまなPHPアプリケーションの文字化け問題の解決策
1) タグを使用してページエンコーディングを設定する
このタグの機能は、クライアントのブラウザがページを表示するために使用する文字セットエンコーディングを宣言することです。 - 8 (UTF8 である MySQL とは異なります) など。したがって、ほとんどのページはこのメソッドを使用して、このページを表示するときに使用するエンコーディングをブラウザーに指示し、エンコーディング エラーや文字化けを回避できます。しかし、場合によっては、この文がどの xxx であっても機能しないことがわかります。これについては後で説明します。
これはHTML情報に属し、サーバーがHTML情報をブラウザに渡したことを示すだけの単なるステートメントであることに注意してください。
2) header("content-type:text/html; charset=xxx");
この関数 header() の機能は、括弧内の情報を http ヘッダーに送信することです。括弧内の内容が記事に記載されているとおりであれば、最初のラベルと比較すると、文字が似ていることがわかります。ただし、違いは、この機能がある場合、ブラウザは常に要求された xxx エンコーディングを使用し、決して従わないことです。そのため、この機能は非常に便利です。なぜこれが起こっているのでしょうか? 次に、http ヘッダーと HTML 情報の違いについて話さなければなりません:
http ヘッダーは、http プロトコルを使用して HTML 情報をブラウザーに送信する前にサーバーによって送信される文字列です。タグはHTML情報に属しているため、header()で送信された内容が最初にブラウザに届きます。人気のポイントは、header()の優先度が高いことです(これを言えるかわかりませんが)。 PHP ページに header("content-type:text/html;charset=xxx") と header("content-type:text/html;charset=xxx") の両方がある場合、ブラウザは前者の http ヘッダーとヘッダーのみを認識します。メタではありません。もちろん、この関数はphpページ内でのみ使用できます。
なぜ前者は確実に機能するのに、後者は時々機能しないのかという疑問も残ります。これが、次に Apache について話したい理由です。
3) AddDefaultCharset
Apache ルートディレクトリの conf フォルダに、Apache 設定ドキュメント全体 httpd.conf があります。
テキスト エディタを使用して httpd.conf を開きます。708 行目 (バージョンが異なる場合があります) には、AddDefaultCharset xxx (xxx はエンコード名) が含まれています。このコード行の意味: サーバー全体の Web ページ ファイルの http ヘッダーの文字セットをデフォルトの xxx 文字セットに設定します。この行があることは、各ファイルにヘッダー行 ("content-type: text/html; charset=xxx") を追加することと同じです。これで、ブラウザが utf-8 に設定されているにもかかわらず常に gb2312 を使用する理由が理解できました。
Webページにheader("content-type:text/html; charset=xxx")がある場合、デフォルトの文字セットが設定した文字セットに変更されるので、この機能は常に役に立ちます。 AddDefaultCharset xxx の前に「#」を追加し、この文をコメントアウトし、ページにヘッダー (「content-type...」) が含まれていない場合は、メタ タグが有効になります。
上記の優先順位は以下の通りです:
header("content-type:text/html; charset=xxx")
.. AddDefaultCharset xxx
..
Webプログラマならオススメですto you 各ページにヘッダー ("content-type: text/html; charset=xxx") を追加します。これにより、どのサーバーでも正しく表示され、強力な移植性が確保されます。
4) php.iniのdefault_charset設定:
php.iniのdefault_charset = "gb2312"は、phpのデフォルトの言語文字セットを定義します。通常、この行をコメント アウトし、必須要件とするのではなく、Web ページ ヘッダーの文字セットに基づいてブラウザが自動的に言語を選択できるようにすることをお勧めします。これにより、複数の言語の Web サービスを同じサーバー上で提供できます。