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

PHP エンコードと中国語文字化けの問題の解決策

WBOY
WBOYオリジナル
2016-07-25 08:53:54773ブラウズ
  1. [mysql]
  2. default-character-set=utf8
  3. [mysqld]
  4. default-character-set=utf8
  5. default-storage-engine=myisam
  6. [mysqld]の下に追加します:
  7. default-collat​​ion=utf8_bin
  8. init_connect='set names utf8'
コードをコピーします

2. データベース操作を実行する必要がある PHP プログラムの前に、エンコーディングが PHP エンコーディングと一致するように追加します。 PHPのエンコードがgb2312、mysqlのエンコードがgb2312の場合はutf-8なので、データの挿入時や取得時に文字化けが発生しません

三、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() を呼び出すときに問題は発生しません。ファイル名を元の漢字名に変更します。

ダウンロードを実装するコードの例:

  1. header("pragma: public");
  2. header("expires: 0");
  3. header("cache-component: must-revalidate、post-check=0、pre- check=0");
  4. header("content-type: $file_type");
  5. header("content-length: $file_size");
  6. header("content-disposition:attachment; filename="$file_name"") ;
  7. header("content-transfer-encoding: binary");
  8. readfile($file_path);
コードをコピー

$file_type はファイルのタイプ、$file_name は元の名前、$file_path はファイルの保存場所 サービス上のファイルのアドレス。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。