ホームページ  >  記事  >  バックエンド開発  >  知っておくべきPHP中国語コーディングのヒント?

知っておくべきPHP中国語コーディングのヒント?

怪我咯
怪我咯オリジナル
2017-07-06 10:52:351436ブラウズ

この記事では主に 4 つの実践的な PHP 中国語コーディングのヒントを紹介します。これらをマスターすれば、コーディングの問題について心配する必要はなくなります。

PHP プログラミングにおける中国語エンコーディングの問題は、実際には非常に単純です。この問題の原因は、米国の拡張 ASCII コードなど、コンピューター情報交換用の文字エンコーディング セットを規定しています。米国、中国GB2312-80、日本のJISなどこの国・地域における情報処理の基盤として、文字コードセットはエンコードを統一する上で重要な役割を果たしています。文字エンコーディング セットは、長さに応じて、SBCS (シングル バイト キャラクタ セット) と DBCS (ダブル バイト キャラクタ セット) の 2 つのカテゴリに分類されます。初期のソフトウェア (特にオペレーティング システム) では、ローカル文字情報のコンピューター処理を解決するために、差別化を図るために、LANG やコードページなどの概念が導入されました。ただし、さまざまなローカル文字セットのコード範囲が重複しているため、相互に情報を交換するのは困難であり、ソフトウェアの各ローカライズ バージョンを個別に保守するコストは高くなります。そのため、ローカライズ作業の共通点を抽出して一貫して処理し、特殊なローカライズ処理内容を最小限にする必要があります。これは国際化 (118N) とも呼ばれます。各種言語情報はさらにロケール情報として標準化されます。処理される基礎となる文字セットは Unicode になり、これにはほぼすべてのグリフが含まれます。 現在、国際的な特性を持つソフトウェアの中核となる文字処理のほとんどはUnicodeに基づいており、ソフトウェアの実行時には、対応するローカル文字エンコード設定がその時のロケール/Lang/コードページ設定に基づいて決定され、ローカル文字が設定されます。それに応じて処理されます。処理中に、Unicode とローカル文字セット間、または Unicode を中間として使用する 2 つの異なるローカル文字セット間で変換する必要があります。この方法はネットワーク環境でもさらに拡張され、ネットワークの両端にある文字情報も文字セット設定に従って許容可能なコンテンツに変換する必要があります。

データベースのキャラクタ セット エンコーディングの問題

一般的なリレーショナル データベース システムはすべてデータベース キャラクタ セット エンコーディングをサポートしています。つまり、

データベースの作成

時に独自のキャラクタ セット設定を指定でき、データベース データは指定された形式になります。エンコード形式のストレージ。アプリケーションがデータにアクセスするとき、開始時と終了時に文字セット エンコード変換が行われます。中国語データの場合、データベースの文字エンコード設定によりデータの整合性が保証される必要があります。 GB2312、GBK、UTF-8 などはすべてオプションのデータベース文字セット エンコーディングです。もちろん ISO8859-1 (8 ビット) を選択することもできますが、アプリケーションが書き込む前に 16 ビットの中国語文字または Unicode を分割する必要があります。データを 2 つの 8 ビット文字に分割します。データを読み取った後、2 つのバイトを結合して SBCS 文字を識別する必要があります。そのため、データベース キャラクタ セット エンコーディングとして ISO8859-1 を使用することはお勧めしません。これでは、データベース自体の文字セット エンコーディング サポートが最大限に活用されないだけでなく、プログラミングの複雑さも増大します。プログラミングを行う場合、まずデータベース管理システムが提供する管理機能を使用して、中国語データが正しいかどうかを確認できます。 データベースにクエリを実行する前に、PHP プログラムはまず

mysql_query

("SET NAMES xxxx"); ここで、xxxx は Web ページのエンコーディングです (Web ページで charset=utf8 の場合、xxxx=)。 utf8. charset=gb2312、次に xxxx=gb2312。ほとんどすべての WEB プログラムには、データベースに接続するための共通のコードがあり、このファイルに mysql_query("SET NAMES xxxx") を追加します。 SET NAMESは、クライアントから送信されたSQL文でどのような文字セットが使用されているかを示します。したがって、SET NAMES 'utf-8' ステートメントは、サーバーに「このクライアントからの今後の情報では文字セット utf-8 が使用される」ことを伝えます。また、サーバーがクライアントに送り返す結果の文字セットも指定します (たとえば、SELECT ステートメントを使用する場合、列の値にどの文字セットが使用されるかを示します)。

問題を特定するときに一般的に使用される手法

中国語のエンコーディングの問題を特定する最も愚かで効果的な方法は、疑わしいと思われるプログラムによる処理後の文字列の内部コードを出力することです。文字列の内部コードを出力すると、いつ中国語の文字が Unicode に変換されるか、いつ Unicode が中国語の内部コードに再変換されるか、いつ 1 つの中国語の文字が 2 つの Unicode 文字になるか、いつ中国語の文字列が次の文字列に変換されるかを知ることができます。疑問符、いつ中国語の文字列の上位ビットが切り捨てられたのですか... 適切なサンプル文字列を使用すると、質問の種類を区別するのにも役立ちます。例: 「aaah aa?@aa」、および GB と GBK の両方の特性文字を含むその他の中国語と英語の文字列。一般に、英語の文字は、どのように変換または処理しても歪みません (歪みが発生した場合は、連続する英語文字の長さを長くしてみてください)。

さまざまなアプリケーションの

コード化けの問題を解決します

1) タグを使用してページエンコーディングを設定します

このタグの目的は、クライアントのブラウザがページを表示するために使用する文字セットエンコーディングを宣言することです。xxx には、GB2312、GBK、UTF-8 (MySQL とは異なります。UTF8) などを指定できます。したがって、ほとんどのページはこのメソッドを使用して、このページを表示するときに使用するエンコーディングをブラウザーに指示し、エンコーディング エラーや文字化けを回避できます。しかし、場合によっては、この文がどの 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プログラマーであれば、各ページにヘッダー ("content-type: text/html; charset=xxx") を追加すると、どのサーバーでも正しく表示され、移植性が高くなります。

4) PHP.iniのdefault_charset設定:

php.iniのdefault_charset = "gb2312"は、PHPのデフォルトの言語文字セットを定義します。通常、この行をコメント アウトし、必須要件とするのではなく、Web ページ ヘッダーの文字セットに基づいてブラウザが言語を自動的に選択するようにすることをお勧めします。これにより、複数の言語の Web サービスを同じサーバー上で提供できます。 。

結論

実際、PHP開発における中国語のコーディングは想像されているほど複雑ではありません。問題を見つけて解決するためのルールはなく、さまざまな動作環境も異なりますが、その背後にある原理は同じです。文字セットの知識を理解することは、文字の問題を解決するための基礎です。しかし、中国語の文字セットの変更により、PHP プログラミングだけでなく、中国語の情報処理の問題もしばらくは残るでしょう。

以上が知っておくべきPHP中国語コーディングのヒント?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。