Bug #71034 [Com]: Can't add UTF-8 filenames as UTF-8 to ZIP archive

From: Date: Sat, 05 Dec 2015 06:48:23 +0000
Subject: Bug #71034 [Com]: Can't add UTF-8 filenames as UTF-8 to ZIP archive
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-197611@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=71034&edit=1 ID: 71034 Comment by: slavikca at gmail dot com Reported by: slavikca at gmail dot com Summary: Can't add UTF-8 filenames as UTF-8 to ZIP archive Status: Feedback Type: Bug Package: Zip Related Operating System: Ubuntu 14.04 PHP Version: 5.6.16 Block user comment: N Private report: N New Comment: Also, today tried to test with this system: - PHP 7.0.0 - Ubuntu 14.04 - Zip version 1.13.0 - Libzip version 1.0.1 Same results. Archive created with filenames stored not in UTF-8. Here is phpinfo page (may be removed later): http://dev.slavikf.com/info.php Previous Comments: ------------------------------------------------------------------------ [2015-12-05 02:24:58] slavikca at gmail dot com 1) is the current locale UTF-8 2) is the terminal charset UTF-8 Yes, all my locales are UTF-8: $ locale LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" 3) is the actual filename string used in PHP UTF-8, especially the filename is hardcoded - your script is UTF-8 encoded file If your question about file, where I have PHP code, then - yes: $ file index.php index.php: PHP script, UTF-8 Unicode text If you are saying, that I need to force PHP to use string in UTF-8 - I do not know, how to do it. Do I have to use some commands / flags? ------------------------------------------------------------------------ [2015-12-05 02:07:15] ab@php.net Please check the following: - is the current locale UTF-8 - is the terminal charset UTF-8 - is the actual filename string used in PHP UTF-8, especially the filename is hardcoded - your script is UTF-8 encoded file Only if all of these match, it could be a bug in PHP on in libzip. Thanks. ------------------------------------------------------------------------ [2015-12-04 21:45:39] slavikca at gmail dot com In case, if it was not clear from my original issue description: output of "unzip" from linux shows UTF-8 characters. So, that is example of adding filename correctly, in UTF-8. output of "unzip" from file, create in PHP shows filename seemingly correctly (same as original), but it is not in UTF-8. That's bad, because it will show correct filename only in the systems with same locale settings. If it is different - it will be garbled. But UTF-8 will work correctly 100% on any system (which supports UTF-8) with any locale. ------------------------------------------------------------------------ [2015-12-04 21:36:15] slavikca at gmail dot com Description: ------------ *Steps to reproduce* - use ZipArchive to archive file, which has UTF-8 characters in it. Test script: --------------- <?php $zip = new ZipArchive(); if ($zip->open("test.zip", ZIPARCHIVE::CREATE) !== true) die ("Failed to create archive"); if (!$zip->addFile("/var/www/test/web/тест123")) //here are UTF-8 characters in the filename print ("Failure adding file"); $zip->close(); Expected result: ---------------- the name of archived file will be stored as UTF-8 Actual result: -------------- file successfully archived. But it's names stored not in UTF-8. To see, if filename was stored au UTF-8 or not, you can use "-U" option in unzip utility: Here is output for archive created in PHP: # unzip -l -U test.zip ... /var/www/test/web/тест123 Here is output for archive created by linux zip utility: # unzip -l -U test2.zip ... /var/www/test/web/#U0442#U0435#U0441#U0442123 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=71034&edit=1

« previous php.bugs (#197611) next »