PHPチュートリアルでの中国語の文字化けの解決策
最も厄介なのは、ajax post get で漢字が文字化けすることです
ajax を使用して中国語を送信すると、ff は非常に賢く、中国語の文字を 16 進数に自動的に変換しますが、BC の ie はそれを自分で処理する必要があります...-____!!
。最も簡単な方法は、エスケープする必要がある場合に js の組み込み関数 encodeuricomponent を使用することです
追記 最初は、escape は漢字をエスケープするために使用されました
PHPのその他の文字化け解決策の分析
1. PHPファイル自体のエンコーディングとWebページのエンコーディングが一致している必要があります
a. gb2312 エンコーディングを使用したい場合、php はヘッダーを出力する必要があります: 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-collation=utf8_bin
init_connect='utf8 の名前を設定'
2. データベース操作を実行する必要がある PHP プログラムの前に mysql_query("set names 'encoding'"); を追加します。PHP エンコーディングが gb2312 の場合、mysql エンコーディングは gb2312 です。 utf-8 の場合、mysql エンコーディングは utf8 なので、データの挿入または取得時に文字化けが発生しません
Three.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("pragma: 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はサービス上に保存されたファイルのアドレスです