検索
ホームページphp教程php手册PHPにおける中国語文字化けの解決策のまとめと分析

PHPにおける中国語文字化けの解決策のまとめと分析

Jun 13, 2016 pm 12:22 PM
php1つそして中国語文字化け分析する方法マッチ要約する書類コーディングウェブページ解決する

1. 1 つ目は、PHP Web ページのエンコーディングです
1。gb2312 エンコーディングを使用する場合は、php ファイル自体のエンコーディングと Web ページのエンコーディングが一致している必要があります。ヘッダーを出力します: header(“Content-Type: text /html; charset=gb2312″)、すべてのファイルのエンコード形式は ANSI であり、メモ帳で開き、ソース ファイルを上書きして、名前を付けて保存し、エンコードを選択できます。
b. utf-8 エンコードを使用する場合、php はヘッダーを出力する必要があります: header(“Content-Type: text/html; charset=utf-8”)、
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]: stat が失敗しました… in …
警告: readfile() [function.readfile]: ストリームを開けませんでした: .. の引数が無効です。
これらのエラーは、Linux 環境で gb2312 エンコーディングを使用する場合には発生しませんが、保存後のファイル名はこの場合、まずオペレーティング システムが認識するエンコードに変換することができます。 mb_convert_encoding (文字列、新しいエンコード、元のエンコード) を使用できます。または iconv (元のエンコード、新しいエンコード、文字列) を保存すると、保存されたファイル名は文字化けせず、正常に読み込むことができ、中国語名のファイルのアップロードとダウンロードが可能になります。
実際には、より良い解決策があります。それは、システムから完全に切断することです。そのため、システムのエンコードを考慮する必要はありません。ファイル名として文字と数字のみのシーケンスを生成し、データベースに漢字を含む元の名前を保存することができます。この方法では、ダウンロード時に move_uploaded_file() を呼び出すときに問題は発生しません。ファイル名を中国語の文字を含む元の名前に変更します。ダウンロードを実装するコードは次のとおりです。
header(”Pragma: public”)
header(”Expires: 0″); 0、pre -check=0″);
header(”Content-type: $file_type”);
header(”Content-Length: $file_size”); Attachment; filename =”$file_name”);
header(”Content-Transfer-Encoding: binary”);
readfile($file_path); $file_type はファイルのタイプです。元の名前、$file_path はサービスに保存されたファイルのアドレスです。

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

文字化けが発生する原因は大きく分けて 2 つあります。 1 つ目は、エンコード (文字セット) の設定が間違っているため、ブラウザが間違ったエンコードで解析してしまうことです。 2 つ目は、ファイルが間違ったエンコードで開かれて保存された場合です。たとえば、テキスト ファイルは元々 GB2312 でエンコードされていたのに、UTF-8 エンコードで開かれて保存されました。上記の文字化けしたコードの問題を解決するには、まず開発のどの側面にエンコーディングが関係しているかを知る必要があります。
1. ファイル エンコーディング: ページ ファイル (.html、.php など) 自体が保存されるエンコーディングを指します。 。 Notepad と Dreamweaver では、ページを開くときにファイルのエンコーディングが自動的に認識されるため、問題は少なくなります。ただし、ZendStudio はエンコーディングを自動的に認識しません。作業中に誤って間違ったエンコーディングでファイルを開き、変更を行った後にファイルを保存すると、文字化けしてしまいます。の文字が出てきます(しみじみ)。
2. ページ宣言のエンコーディング: HTML コード HEAD で、 3. データベース接続エンコーディング: データベース操作を実行するときにデータベースにデータを送信するために使用されるエンコーディングを指します。これは、データベース自体のエンコーディングと混同しないように注意する必要があります。たとえば、MySQL の内部デフォルト エンコーディングは latin1 エンコーディングであり、Mysql に送信されたデータは他のエンコーディングで変換されることを意味します。
WEB 開発にエンコーディングが関係していることを理解すると、コードが文字化けする理由もわかります。さまざまなエンコーディングのほとんどは ASCII、英語の記号と互換性があるためです。
5. いくつかの一般的なエラー状況と解決策に対処します。
1. データベースは UTF8 エンコーディングを使用し、ページ宣言エンコーディングは GB2312 です。現時点で文字化けの最も一般的な原因は、PHP スクリプト内の直接 SELECT データが文字化けしていることです。mysql_query("SET NAMES GBK"); を使用して MYSQL 接続エンコーディングを設定し、ページ宣言のエンコードは、ここで設定した接続エンコードと一致します (GBK は GB2312 拡張子です)。ページが UTF-8 でエンコードされている場合は、mysql_query("SET NAMES UTF8"); ではなく UTF8 であることに注意してください。ページで宣言されたエンコーディングがデータベースの内部エンコーディングと一致している場合、
注: 実際には、MYSQL のデータ入力と出力は、 MYSQL 設定ファイル my.ini には 2 つのデフォルトのエンコーディングが定義されており、[client] のデフォルトと [mysqld] のデフォルトの文字セットはそれぞれ使用されるエンコーディングを設定します。上記で指定したエンコーディングは、実際には、MYSQL クライアントがサーバーに接続するときに、クライアント データがデフォルトのエンコーディングを使用する代わりに使用されるエンコーディングを 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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版

SublimeText3 Mac版

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