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

PHP_PHP チュートリアルの中国語文字化けに対する完璧な解決策

WBOY
WBOYオリジナル
2016-07-21 15:43:17784ブラウズ

1. 1 つ目は、PHP Web ページのエンコーディングです
1。php ファイル自体のエンコーディングと Web ページのエンコーディングは
a と一致する必要があります。gb2312 エンコーディングを使用する場合、php はヘッダーを出力する必要があります。 "Content-Type: text/html; charset=gb2312 ")、静的ページに を追加します。すべてのファイルは 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
[mysqld] の下に追加します:
default-collat​​ion=utf8_bin
init_connect='SET NAMES utf8'

2. データベース操作を実行する必要がある PHP プログラムの前に、エンコーディングが PHP エンコーディングと一致するように追加します。 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]: ... の統計に失敗しました。 ..
警告: readfile() [function.readfile]: ストリームを開けませんでした: .. の引数が無効です。
Linux 環境で gb2312 エンコードを使用する場合、これらのエラーは発生しませんが、保存されたファイル名が文字化けし、ファイルがを読み取ることができない場合は、まずオペレーティング システムが認識するエンコーディングにパラメータを変換します。エンコーディングの変換には、mb_convert_encoding (文字列、新しいエンコーディング、元のエンコーディング) または iconv (元のエンコーディング、新しいエンコーディング、文字列) を使用できます。処理後に保存されるファイル名は文字化けせず、正常に読み込むことができ、中国語名のファイルもアップロード、ダウンロードできます。
実際、より良い解決策があります。それはシステムから完全に分離することであり、システムのエンコーディングを考慮する必要はありません。ファイル名として文字と数字のみのシーケンスを生成し、データベースに漢字を含む元の名前を保存することができます。この方法では、ダウンロード時に move_uploaded_file() を呼び出すときに問題は発生しません。ファイル名を中国語の文字を含む元の名前に変更します。ダウンロードを実装するコードは次のとおりです

コードをコピーします コードは次のとおりです:
header("Expires: 0"); -コンポーネント: 必須再検証、事後チェック = 0、事前チェック = 0");
header("Content-type: $file_type");
header("Content-Length: $file_size");
header( "Content-Disposition:attachment; filename="$file_name");
header("Content-Transfer-Encoding:binary");


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


http://www.bkjia.com/PHPjc/320798.html

www.bkjia.com

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