ホームページ >バックエンド開発 >PHPチュートリアル >PHP エンコードと中国語文字化けの問題の解決策
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() を呼び出すときに問題は発生しません。ファイル名を元の漢字名に変更します。 ダウンロードを実装するコードの例:
$file_type はファイルのタイプ、$file_name は元の名前、$file_path はファイルの保存場所 サービス上のファイルのアドレス。 |