ホームページ バックエンド開発 PHPチュートリアル PHPの中国語文字化けの一般的な解決策のまとめ

PHPの中国語文字化けの一般的な解決策のまとめ

Jun 13, 2016 pm 12:23 PM
content mysql php

PHP の中国語文字化けのよくある解決策のまとめ

PHP の中国語文字化けは、PHP 開発においてよくある問題の 1 つです。 PHP の中国語の文字化けは、Web ページ自体で発生することもあれば、MySQL の対話プロセスで発生することもあり、オペレーティング システムに関連していることもあります。ここに概要を示します。

1. 1 つ目は、PHP Web ページのエンコーディングです。

1 を使用する場合は、php ファイル自体のエンコーディングと Web ページのエンコーディングが一致している必要があります。 gb2312 エンコードの場合、php はヘッダーを出力する必要があります: header( "Content-Type: text/html; charset=gb2312"), add 静的ページに移動し、すべてのファイルのエンコード形式が ANSI である場合は、メモ帳でファイルを開き、名前を付けて保存してエンコードを ANSI として選択し、ソース ファイルを上書きします。

b. utf-8 エンコーディングを使用する場合、php はヘッダーを出力する必要があります: header("Content-Type: text/html; charset=utf-8")、 に設定すると、すべてのファイルのエンコード形式は utf-8 になります。 utf-8 として保存するのは少し面倒かもしれません。セッションを使用する場合は、editplus を使用して保存できます。パラメータの選択 -> ファイル -> UTF-8 署名で、「常に削除」を選択し、BOM 情報を削除します。

2. PHP 自体は Unicode ではないため、substr などのすべての関数を mb_substr に変更する必要があります (mbstring 拡張機能をインストールする必要があります)。または、iconv を使用してトランスコードできます。

2. PHP と Mysql 間のデータ対話

PHP とデータベースのエンコーディングは一貫している必要があります

1. mysql 設定ファイル my.ini または my.cnf を変更するのが最善です。 mysql には utf8 エンコーディングを使用します

[mysql]

default-character-set=utf8

[mysqld]
default-character-set=utf8
default-storage-engine=MyISAM
in [mysqld] 以下を追加します:
default-collat​​ion=utf8_bin
init_connect='SET NAMES utf8'

2. PHP の前に mysql_query("set names 'encoding'") を追加します。データベース操作を実行する必要があるプログラム、エンコーディングは PHP エンコーディングと一致します。PHP エンコーディングが gb2312 の場合、mysql エンコーディングは utf8 です。データの挿入時や取得時に文字化けしないこと

3つ。 PHP はオペレーティングシステムに関係します

Windows と Linux ではエンコードが異なります。Windows 環境で PHP 関数を呼び出す際、パラメーターが utf-8 エンコードされていると、次のようなエラーが発生します。 move_uploaded_file()、filesize()、readfile() など。これらの関数は、アップロードとダウンロードの処理時によく使用されます。呼び出し時に次のエラーが発生する可能性があります:

警告: move_uploaded_file()[function.move-uploaded] -file ]: ストリームを開けませんでした: ...

の引数が無効です。 警告: move_uploaded_file()[function.move-uploaded-file]: ...

警告: filesize() [function.filesize]: ... の ... の統計に失敗しました

警告: readfile() [function.readfile]: ストリームを開けませんでした: の引数が無効です..

Linux 環境で gb2312 エンコードを使用する場合、これらのエラーは発生しませんが、保存されたファイル名が文字化けし、ファイルを読み取ることができなくなります。この場合、まずパラメータをエンコードに変換することができます。 mb_convert_encoding (文字列、新しいエンコード、元のエンコード) または iconv (元のエンコード、新しいエンコード、文字列) を使用すると、処理後に保存されたファイル名が文字化けせず、エンコード変換を実行できます。ファイルを正常に読み取ることができ、中国語名ファイルの変換を実現します。アップロード、ダウンロード。

実際には、システムから完全に切り離された、より良いソリューションがあり、システムのエンコーディングを考慮する必要はありません。ファイル名として文字と数字のみのシーケンスを生成し、データベースに漢字を含む元の名前を保存することができます。この方法では、ダウンロード時に move_uploaded_file() を呼び出すときに問題は発生しません。ファイル名を中国語の文字を含む元の名前に変更します。ダウンロードを実装するコードは次のとおりです:

header("Pragma: public");

header("Expires: 0");

header("Cache-コンポーネント: 再検証する必要があります、事後チェック = 0、事前チェック = 0");

header("Content-type: $file_type");

header("Content-Length : $file_size" );

header("Content-Disposition:attachment; filename="$file_name"");

header("Content-Transfer-Encoding:binary");

readfile($file_path);

$file_type はファイルの種類、$file_name は元の名前、$file_path はサービスに保存されたファイルのアドレスです。

4.文字化けが発生する原因をまとめてみましょう

文字化けが発生する原因は大きく分けて 2 つあります。 1 つ目は、エンコード (文字セット) の設定が正しくないため、ブラウザが2 つ目は、ファイルが間違ったエンコードで開かれ、その後保存された場合です。たとえば、テキスト ファイルは元々 GB2312 でエンコードされていましたが、開かれました。 UTF-8エンコーディングで保存してください。上記の文字化けコードの問題を解決するには、まず開発のどの側面にコーディングが含まれるかを知る必要があります。

1. ファイルエンコーディング: ページファイル (.html、.php など) 自体が保存されるエンコーディングを指します。 Notepad と Dreamweaver では、ページを開くときにファイルのエンコーディングが自動的に認識されるため、問題は少なくなります。ただし、ZendStudio はエンコーディングを自動的に認識しません。作業中に誤って間違ったエンコーディングでファイルを開き、変更を行った後にファイルを保存すると、文字化けしてしまいます。の文字が出てきます(しみじみ)。

2. ページ宣言のエンコーディング: HTML コード HEAD では、 を使用して伝えることができます。ブラウザ サーバー Web ページにはどのようなエンコーディングが使用されますか? 現在、XXX は中国の Web サイト開発で主に GB2312 と UTF-8 を使用しています。

3. データベース接続エンコーディング: データベース操作を実行するときに使用されるエンコーディングを指します。データベースからデータを送信するときは、データベース自体のエンコーディングと混同しないように注意する必要があります。たとえば、MySQL 内のデフォルトのエンコーディングは latin1 エンコーディングです。つまり、Mysql は Mysql に送信されるデータを latin1 エンコーディングで保存します。他のエンコーディングは latin1 に変換されます。
WEB 開発にエンコーディングが関係していることを知ると、文字化けの原因もわかります。さまざまなエンコーディングのほとんどが ASCII 互換であるためです。 、英語の記号は表示されません。

5. いくつかの一般的なエラー状況と解決策に対処します。

1 データベースは UTF8 エンコーディングを使用します。現時点では、PHP スクリプトの直接 SELECT から出力されるデータが文字化けする最も一般的な原因です。mysql_query("SET NAMES GBK") を使用する必要があります。 ; ページがエンコードを宣言するように MYSQL 接続エンコードを設定します (GBK は GB2312 の拡張です)。mysql_query(") SET NAMES UTF8");
一般的に使用される UTF-8 ではなく、UTF8 であることに注意してください。ページで宣言されたエンコーディングがデータベースの内部エンコーディングと一致している場合は、接続エンコーディングを設定する必要はありません。

注: 実際、MYSQL のデータ入出力は、MYSQL 構成ファイル my.ini で定義されているように、上記よりも複雑です。 [client] と [mysqld] のdefault-character-set は、クライアント接続とデータベースが内部的に使用するエンコーディングをそれぞれ設定します。エンコーディングは実際には、MYSQL クライアントがサーバーに接続するときにコマンド ライン パラメータcharacter_set_client に指示します。 MYSQL サーバーは、デフォルトのエンコーディング

を使用する代わりに、受信したクライアント データのエンコーディングを変更します。 2. ページ宣言のエンコーディングとファイル自体のコーディングが一貫していない場合、これはめったに起こりません。コーディングが一貫していない場合、アーティストに表示される内容が異なるためです。ページ作成時にブラウザでコードが文字化けします。多くの場合、リリース後にいくつかの軽微なバグを修正し、間違ったエンコーディングでページを開いて保存することが原因で発生します。または、CuteFTP などの一部の FTP ソフトウェアを使用してオンラインでファイルを直接変更すると、ソフトウェアのエンコード設定が間違っているため、間違ったエンコードが変換されます。

3. バーチャルホストをレンタルしている友人の中には、上記 3 つのエンコードが正しく設定されているにもかかわらず、文字化けが発生する人もいます。たとえば、Web ページが GB2312 でエンコードされている場合、ブラウザのエンコードを手動で GB2312 に変更すると、Web ページの HEAD はすでに GB2312 として認識されます。 、ページは正常に表示されます。その理由は、サーバー Apache がサーバーのグローバルなデフォルト エンコーディングを設定し、httpd.conf に AddDefaultCharset UTF-8 を追加するためです。このとき、サーバーは最初に HTTP ヘッダーをブラウザーに送信しますが、その優先順位はページ内で宣言されたエンコーディングよりも高くなります。当然、ブラウザーはそれを誤って認識します。解決策は 2 つあります。管理者は、AddDefaultCharset GB2312 を独自の仮想マシンの構成ファイルに追加してグローバル構成をオーバーライドするか、独自のディレクトリの .htaccess で構成する必要があります。

要約: 一言で言えば、PHP で中国語の文字化けコードを解決する最善かつ最速の方法は、ページ番号が適用されている場合に、ページによって宣言されたコーディングをデータベースの内部コーディングと一致させることです。ページがデータベースの内部コーディングと矛盾しています。set 接続コードを設定します、mysql_query("SET NAMES XXX ");

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの現在のステータス:Web開発動向を見てください PHPの現在のステータス:Web開発動向を見てください Apr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

PHP:多くのウェブサイトの基礎 PHP:多くのウェブサイトの基礎 Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

See all articles