La solution aux caractères chinois tronqués dans php ziparchive : ouvrez d'abord le package compressé pour transcoder les noms de fichiers et les répertoires internes ; puis fermez le package compressé après le transcodage et rouvrez-le pour décompresser.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.1, ordinateur DELL G3
Solution aux caractères chinois tronqués lors de la décompression de PHP à l'aide de ZipArchive Problème
L'utilisation de ZipArchive de PHP pour décompresser des packages compressés avec des noms de fichiers chinois entraînera des caractères tronqués :
$zip = new \ZipArchive(); $res = $zip->open('./钱学森班.zip'); if ($res !== true){ throw new \Exception('打开压缩包失败'); }$zip->extractTo('./cache'); $zip->close();
Fenêtres par défaut, encodage mac lors de la compression du package Pour le chinois simplifié, aucune conversion de fichier n'a été effectuée lors de la décompression, ce qui a entraîné des résultats de décompression incohérents avec les attentes
Après avoir ouvert le package compressé, transcodez d'abord le nom du fichier interne et le répertoire, et devez le fermer après le transcodage. Compressez le package et rouvrez-le pour décompresser
comme suit :
$zipName = './钱学森班.zip'; $zip = new \ZipArchive(); $res = $zip->open($zipName); if ($res !== true){ throw new \Exception('打开压缩包失败'); } // 加入此段↓ $fileNum = $zip->numFiles; for ($i = 0; $i < $fileNum; $i++) { $statInfo = $zip->statIndex($i, ZipArchive::FL_ENC_RAW); $zip->renameIndex($i, iconv('GBK', 'utf-8//IGNORE', $statInfo['name'])); } $zip->close(); $zip->open($zipName); // 截至↑ $zip->extractTo($extractTo); $zip->close();
Utilisez mb_detect_encoding avant la conversion Le jugement d'encodage renvoie toujours UTF-8
Étude recommandée : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!