ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHPチュートリアルの中国語文字化け問題の完璧な解決策

PHP_PHPチュートリアルの中国語文字化け問題の完璧な解決策

WBOY
WBOYオリジナル
2016-07-13 17:38:54838ブラウズ

1. 1つ目はPHP Webページのエンコードです

1.phpファイル自体のエンコードとWebページのエンコードが一致している必要があります

a. gb2312 エンコーディングを使用したい場合、php は header: header ("Content-Type: text/html; charset=gb2312") を出力し、静的ページを追加します。すべてのファイルのエンコーディング形式は 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]

デフォルト文字セット=utf8

[mysqld]

デフォルト文字セット=utf8

default-storage-engine=MyISAM

[mysqld] の下に追加します:

default-collat​​ion=utf8_bin

init_connect=UTF8 の名前を設定します

2. データベース操作を実行する必要がある PHP プログラムの前に mysql_query("set names programming"); を追加します。PHP エンコーディングが gb2312 の場合、mysql エンコーディングは gb2312 です。 utf-8 の場合、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]: stat failed for ... in ...

警告: readfile() [function.readfile]: ストリームを開けませんでした: ..

の引数が無効です

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

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

header("プラグマ: public");

header("有効期限: 0");

header("キャッシュコンポーネント: 必須再検証、事後チェック=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はサービス上に保存されたファイルのアドレスです。

http://www.bkjia.com/PHPjc/486438.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/486438.html技術記事 1. 1 つ目は、PHP Web ページのエンコーディングです。 1. PHP ファイル自体のエンコーディングと Web ページのエンコーディングは一致する必要があります。 gb2312 エンコーディングを使用する場合、PHP は header: header (Content) を出力する必要があります。 -タイプ: text/html...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。