ホームページ >バックエンド開発 >PHPチュートリアル >PHPでの中国語コーディングの悩みを簡単に解決するヒント

PHPでの中国語コーディングの悩みを簡単に解決するヒント

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 12:02:04822ブラウズ

PHP 中国語エンコードの問題を簡単に解決するヒント

PHP 中国語エンコードの問題はかつて多くの友人を悩ませましたが、ほとんどの人はこの問題を解決しているはずですが、今日もこれらを繰り返したいと思いますヒント。
?
PHP プログラミングにおける中国語エンコーディングの問題は、実は非常に単純な理由で、それぞれの国 (または地域) に規定されています。アメリカの拡張ASCIIコード、中国のGB2312-80、日本のJISなど、コンピュータ情報交換用の文字エンコードセット。この国・地域における情報処理の基盤として、文字コードセットはエンコードを統一する上で重要な役割を果たしています。文字エンコード セットは、長さに応じて、SBCS (シングルバイト文字セット) と DBCS (ダブルバイト文字セット) の 2 つのカテゴリに分類されます。初期のソフトウェア (特にオペレーティング システム) では、ローカル文字情報のコンピューター処理を解決するために、差別化を図るために、LANG やコードページなどの概念が導入されました。ただし、さまざまなローカル文字セットのコード範囲が重複しているため、相互に情報を交換するのは困難であり、ソフトウェアの各ローカライズ バージョンを個別に保守するコストは高くなります。そのため、ローカライズ作業の共通点を抽出して一貫して処理し、特殊なローカライズ処理内容を最小限にする必要があります。これは国際化 (118N) とも呼ばれます。各種言語情報はさらにロケール情報として標準化されています。処理される基礎となる文字セットは 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 ページのエンコーディング (charset=) xxxx)、Web ページで charset=utf8 の場合、xxxx=utf8。Web ページで charset=gb2312 の場合、xxxx=gb2312 です。このファイルに mysql_query("SET NAMES xxxx") を追加するとうまくいきます。
?
SET NAMES クライアントから送信された SQL ステートメントで使用されている文字セットを表示します。したがって、SET NAMES 'utf-8' ステートメントは、サーバーに「このクライアントからの今後の情報では文字セット utf-8 が使用される」ことを伝えます。また、サーバーがクライアントに送り返す結果の文字セットも指定します (たとえば、SELECT ステートメントを使用する場合、列の値にどの文字セットが使用されるかを示します)。
?
問題を特定するために一般的に使用される手法
?
通常、中国語のエンコードを特定するために使用されます問題 最も愚かで最も効果的な方法は、疑わしいと思われるプログラムによる処理後の文字列の内部コードを出力することです。文字列の内部コードを出力すると、いつ中国語の文字が Unicode に変換されるか、いつ Unicode が中国語の内部コードに再変換されるか、いつ 1 つの中国語の文字が 2 つの Unicode 文字になるか、いつ中国語の文字列が次の文字列に変換されるかを知ることができます。疑問符、中国語の文字列の上位ビットが切り取られたのはいつですか...
?
適切なサンプル文字列を取得することも、問題の種類を区別するのに役立ちます。 。例: 「aaah [email protected]」、および中国語と英語が交互に表示され、GB と GBK の両方の特性文字を含むその他の文字列。一般に、英語の文字は、どのように変換または処理しても歪みません (歪みが発生した場合は、連続する英語文字の長さを長くしてみてください)。
?
さまざまなアプリケーションでのコード化けの問題を解決する
?
1) タグ設定を使用するページエンコーディング
?
このタグの目的は、クライアントのブラウザがページを表示するために使用する文字セットエンコーディング (xxx は GB2312、GBK、UTF) を宣言することです。 -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 を開きます (バージョンが異なる場合があります) には、AddDefaultCharset xxx が含まれています。xxx はエンコーディング名です。このコード行の意味: サーバー全体の Web ページ ファイルの http ヘッダーの文字セットをデフォルトの xxx 文字セットに設定します。この行があることは、各ファイルに header("content-type:text/html; charset=xxx") の行を追加することと同じです。これで、ブラウザが utf-8 に設定されているにもかかわらず常に gb2312 を使用する理由が理解できました。
?
Web ページにヘッダー ("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 の = "gb2312" は、PHP のデフォルトの言語文字セットを定義します。通常、この行をコメント アウトし、必須要件とするのではなく、Web ページ ヘッダーの文字セットに基づいてブラウザが自動的に言語を選択できるようにすることをお勧めします。これにより、複数の言語の Web サービスを同じサーバー上で提供できます。
?
実際、PHP 開発における中国語のコーディングは想像されているほど複雑ではありませんが、問題の特定と解決、およびさまざまな動作環境に関する固定ルールはありません。も異なりますが、背後にある原理は同じです。文字セットの知識を理解することは、文字の問題を解決するための基礎です。しかし、中国語の文字セットの変更により、PHP プログラミングだけでなく、中国語の情報処理の問題もしばらくは残るでしょう。
?
上記の内容は、PHP 開発における中国語コーディングの問題をまだ解決していない友人に解決策の提案を提供するものであり、学習中の人にもお役に立てれば幸いです。 PHP フレンドの皆さん、この知識についてもっと学んでください。

記事の出典: http://www.alqsoft.com/xinwenzixun/phpkaifa/2014/0708/130.html

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