目次
php での一般的なコーディングの問題
ホームページ バックエンド開発 PHPチュートリアル PHP でよくあるコーディングの問題

PHP でよくあるコーディングの問題

Jun 20, 2016 pm 01:03 PM
コーディング

php での一般的なコーディングの問題

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

現在、国際化機能を備えたソフトウェアのコア文字処理のほとんどは Unicode に基づいており、ソフトウェアの実行時に、対応するローカル文字エンコーディング設定は、その時点のロケール/言語/コードページ設定に従って決定されます。文字はそれに応じて処理されます。処理中に、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 です。ほとんどすべての 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) デフォルト文字セットの追加

Apache ルート ディレクトリの conf フォルダーには、Apache 設定ドキュメント全体である httpd.conf があります。

テキスト エディタで httpd.conf を開きます (バージョンが異なる場合があります) には、AddDefaultCharset xxx が含まれています。xxx はエンコーディング名です。このコード行の意味: サーバー全体の Web ページ ファイルの http ヘッダーの文字セットをデフォルトの xxx 文字セットに設定します。この行があることは、各ファイルに header("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 プログラミングだけでなく、中国語の情報処理の問題もしばらくは残るでしょう。


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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11 の一般的な分類特徴エンコード技術 11 の一般的な分類特徴エンコード技術 Apr 12, 2023 pm 12:16 PM

機械学習アルゴリズムは数値入力のみを受け入れるため、カテゴリカルな特徴が見つかった場合は、そのカテゴリカルな特徴をエンコードします。この記事では、11 の一般的なカテゴリカル変数のエンコード方法を要約します。 1. ONE HOT エンコーディング 最も一般的で一般的に使用されているエンコーディング方式は One Hot Enoding です。 n 個の観測値と d 個の個別の値を持つ単一の変数は、n 個の観測値を持つ d 個のバイナリ変数に変換され、各バイナリ変数はビット (0, 1) で識別されます。例: コーディング後の最も簡単な実装は、パンダの get_dummiesnew_df=pd.get_dummies(columns=[‘Sex’], data=df)2 を使用することです。

utf8 でエンコードされた中国語の文字は何バイトを占めますか? utf8 でエンコードされた中国語の文字は何バイトを占めますか? Feb 21, 2023 am 11:40 AM

UTF8 でエンコードされた中国語文字は 3 バイトを占めます。 UTF-8 エンコードでは、1 つの中国語文字は 3 バイトに相当し、1 つの中国語の句読点は 3 バイトを占めますが、Unicode エンコードでは、1 つの中国語文字 (繁体字中国語を含む) は 2 バイトに相当します。 UTF-8 は各文字のエンコードに 1 ~ 4 バイトを使用します。1 つの US-ASCIl 文字のエンコードには 1 バイトのみが必要です。ラテン語、ギリシャ語、キリル文字、アルメニア語、および発音区別符号付きのヘブライ語。アラビア語、シリア語およびその他の文字は 2 バイトが必要です。エンコーディング。

ナレッジ グラフ: 大規模モデルの理想的なパートナー ナレッジ グラフ: 大規模モデルの理想的なパートナー Jan 29, 2024 am 09:21 AM

大規模言語モデル (LLM) は、滑らかで一貫したテキストを生成する機能を備えており、人工知能の会話や創造的な文章などの分野に新たな可能性をもたらします。ただし、LLM にはいくつかの重要な制限もあります。まず、彼らの知識はトレーニング データから認識されたパターンに限定されており、世界に対する真の理解が欠けています。第 2 に、推論スキルには限界があり、論理的な推論を行ったり、複数のデータ ソースからの事実を融合したりすることができません。より複雑で自由回答の質問に直面すると、LLM の答えは「幻想」として知られる不条理または矛盾したものになる場合があります。したがって、LLM はいくつかの面では非常に便利ですが、複雑な問題や現実世界の状況を扱う場合には、依然として一定の制限があります。これらのギャップを埋めるために、検索拡張生成 (RAG) システムが近年登場しました。

いくつかの一般的なエンコード方法 いくつかの一般的なエンコード方法 Oct 24, 2023 am 10:09 AM

一般的なエンコード方法には、ASCII エンコード、Unicode エンコード、UTF-8 エンコード、UTF-16 エンコード、GBK エンコードなどがあります。詳細な紹介: 1. ASCII エンコードは、英語の文字、数字、句読点、制御文字などを含む 128 文字を表すために 7 ビット 2 進数を使用する、最も初期の文字エンコード標準です; 2. Unicode エンコードは、文字を表すために使用される方法です。世界中のすべての文字 各文字に固有のデジタル コード ポイントを割り当てる文字の標準的なエンコード方式、3. UTF-8 エンコードなど。

PHP コーディングのヒント: 偽造防止検証機能を備えた QR コードを生成するには? PHP コーディングのヒント: 偽造防止検証機能を備えた QR コードを生成するには? Aug 17, 2023 pm 02:42 PM

PHP コーディングのヒント: 偽造防止検証機能を備えた QR コードを生成するには?電子商取引やインターネットの発展に伴い、QRコードはさまざまな業界で使用されることが増えています。 QRコードの利用にあたっては、製品の安全性を確保し、偽造を防止するために、QRコードに偽造防止検証機能を付加することが非常に重要です。この記事では、PHPを使用して偽造防止検証機能付きQRコードを生成する方法と、対応するコード例を紹介します。始める前に、次の必要なツールとライブラリを準備する必要があります: PHPQRCode: PHP

PHPデータベースクエリ結果のエンコードの問題を解決する方法 PHPデータベースクエリ結果のエンコードの問題を解決する方法 Mar 21, 2023 am 11:49 AM

PHP は、動的な Web ページやアプリケーションの作成に使用できる人気のある Web プログラミング言語です。実際のアプリケーションでは、PHP は多くの場合、データのクエリと処理を行うためにデータベースと対話する必要があります。ただし、PHP を使用してデータベースから結果を取得する場合、エンコードの問題が発生する可能性があり、文字化けが発生することがよくあります。では、PHP データベースのクエリ結果のエンコードの問題を解決するにはどうすればよいでしょうか?

HDB3 エンコード ルールとは何ですか? HDB3 エンコード ルールとは何ですか? Aug 29, 2023 pm 01:38 PM

コーディング規則は次のとおりです: 1. 前のコードが 0 で現在のデータ ビットが 0 の場合、コードは 0; 2. 前のコードが 0 で現在のデータ ビットが 1 の場合、コードはバイポーラ パルス (+A)または - A) カウンターは 1 増加します; 3. 前のコードが 1 で現在のデータ ビットが 1 の場合、コードは 0 でカウンターは 1 増加します; 4. 前のコードが 1 の場合, 現在のデータ ビットは 0, エンコード方式はカウンタのパリティに基づいて決定されます。偶数の場合、エンコードは (+B または -B) です。奇数の場合、エンコードは 0 です。レベルとカウンタがクリアされるなどです。

GenAI に基づいてコーディングのパフォーマンスを向上させる方法を 1 つの記事で学びましょう GenAI に基づいてコーディングのパフォーマンスを向上させる方法を 1 つの記事で学びましょう Apr 01, 2024 pm 06:49 PM

こんにちは、私の名前はルーガです。今日は人工知能 (AI) の生態分野に関連するテクノロジー、GenAI についてお話します。急速な技術革新と差別化されたビジネスシナリオという課題に直面し、従来のコーディング手法は慣れ始めており、増大する需要に完全に対応できなくなっています。同時に、新興の汎用 GenAI (人工知能テクノロジー) は、この需要を満たす大きな可能性を秘めています。 GenAIは人工知能テクノロジーの代表として、その強力な可能性と機能によりあらゆる分野で広く使用され始めています。さまざまなシナリオでのコーディングのニーズを自動的に学習して適応できるため、コーディングの効率と品質が大幅に向上します。ディープラーニングとモデルの最適化を通じて、GenAI はさまざまなデータを正確に理解することができます。

See all articles