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

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 までご連絡ください。
HTML超文本标记语言--超在那里?(文档分析)HTML超文本标记语言--超在那里?(文档分析)Aug 02, 2022 pm 06:04 PM

本篇文章带大家了解一下HTML(超文本标记语言),介绍一下HTML的本质,HTML文档的结构、HTML文档的基本标签和图像标签、列表、表格标签、媒体元素、表单,希望对大家有所帮助!

SpringBoot怎么通过Feign调用传递Header中参数SpringBoot怎么通过Feign调用传递Header中参数May 16, 2023 pm 08:38 PM

【SpringBoot】通过Feign调用传递Header中参数如何通过Feign传递Header参数问题描述我们在SpringCloud中使用Feign请求另一个服务的Api接口时,有将Header中参数传递下去的需求,如果不做特殊处理,就会将Header中的参数丢失。解决方案方案一:通过@RequestHeader(name="headerName")来传递例如:Feign定义如下@FeignClient(name="service-name")pub

linux的header是什么意思linux的header是什么意思Jul 18, 2023 pm 03:34 PM

linux的header是指在文件或数据流中的开头部分,用于包含关于内容的元数据,通过正确地编写和使用Header文件,开发者能够更好地利用系统资源,提高代码的可读性和可维护性。

web前端笔试题库之HTML篇web前端笔试题库之HTML篇Apr 21, 2022 am 11:56 AM

总结了一些web前端面试(笔试)题分享给大家,本篇文章就先给大家分享HTML部分的笔试题(附答案),大家可以自己做做,看看能答对几个!

如何使用PHP header()方法来调整网页如何使用PHP header()方法来调整网页Mar 28, 2023 pm 01:54 PM

PHP是一种功能强大的编程语言,可以用来创建动态网站和Web应用程序。其中一个最强大的功能之一是PHP的header()方法。在本文中,我们将探讨如何使用PHP的header()方法来调整网页。

php header头怎么实现跳转php header头怎么实现跳转Dec 02, 2022 am 09:14 AM

php header实现跳转的方法:1、使用“Header("Location:$url");”语法实现跳转;2、使用if判断式实现跳转,其跳转语句如“if($_COOKIE["u_type"]){ header('location:register.php'); } else{ setcookie('u_type','1','86400*360');”。

html5标签head和header有什么区别html5标签head和header有什么区别Jan 17, 2022 am 11:10 AM

区别:1、head标签用于定义文档头部,它是所有头部元素的容器,而header标签用于定义文档的页眉(介绍信息);2、浏览器都支持head标签,而旧版本浏览器均不支持header标签,需要IE9+以上浏览器才支持header标签。

HTML5中画布标签是什么HTML5中画布标签是什么May 18, 2022 pm 04:55 PM

HTML5中画布标签是“<canvas>”。canvas标签用于图形的绘制,它只是一个矩形的图形容器,绘制图形必须通过脚本(通常是JavaScript)来完成;开发者可利用多种js方法来在canvas中绘制路径、盒、圆、字符以及添加图像等。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール