事情によりファイル名(日本語)の文字コードをUTF-8からSIS-WINに文字変換して処理をし再度ファイル名をSIS-WINからUTF-8に変換するプログラムを作成しております。
しかしながら、こちらPHP5.3では作動したにも関わずPHP8.2では文字化けを起こしてしまい、UTF-8の文字コードに戻らず困っております。
<?php header('Content-Type: text/html; charset=UTF-8'); $word = "./これはテスト.jpg"; $word2 = mb_convert_encoding($word, 'sjis-win','UTF-8'); echo "$word2<br>"; $word3 = mb_convert_encoding($word2, 'UTF-8','sjis-win'); echo "$word3<br><br>"; $zip = new ZipArchive; $zipFilePath = './sample.zip'; $extractPath = './inprocess/sample/'; $fileToAdd = './これはテスト.jpg'; // Zipファイルをオープン if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { // ファイルをZipアーカイブに追加 $zip->addFile($fileToAdd, mb_convert_encoding(basename($fileToAdd), 'sjis-win','UTF-8')); //$zip->addFile($fileToAdd, basename($fileToAdd)); // 展開先ディレクトリが存在しない場合は作成 if (!is_dir($extractPath)) { mkdir($extractPath, 0777, true); } // Zipファイル内のファイルを展開 $zip->extractTo($extractPath); for ($i = 0; $i < $zip->numFiles; $i++) { $filename = $zip->getNameIndex($i); echo " $filename<br>"; $filename2 = mb_convert_encoding($filename, 'UTF-8', 'sjis-win'); echo "$filename2<br>"; $zip->extractTo($extractPath, $filename); } $zip->close(); echo 'ファイルが正常に追加され、展開されました。'; } else { echo 'ファイルのオープンに失敗しました。'; } ?>
結果としては
./����̓e�X�g.jpg
./これはテスト.jpg
é▒éΩé═âeâXâg.jpg
テゥ笆津ゥホゥテゥ笊静「eテ「Xテ「g.jpg
ファイルが正常に追加され、展開されました。
と出て、プログラム上に記述した文字だと文字化けしないのですが、サーバに実在する日本語のファイルを読み込むと文字化けを起こしてしまいます。
これは何かサーバ自体の環境の問題なのでしょうか?
初歩的な質問で大変に申し訳ございませんが、何卒宜しくお願い申し上げます。

回答2件
あなたの回答
tips
プレビュー