Search code examples
phpzend-frameworkzipphp-ziparchive

True(and easy) way to mask filenames in zip archive


I generate Zip archive using ZipArchive lib in PHP. It works good, but if filename have disallowed symbols(for example '<' '>') archive has not this file.

I can just crop all dissallowed symbols.

I motiveless dislike crop. Any another way(may be mask but '\' and '^' doesnt work)?

Thanks.


Solution

  • You might try to use preg_replace() for this:

    <?php
    header('Content-Type: text/plain');
    
    $file = '!@#$%^&*()ashdgf$%^&*(.pdf';
    
    $file = preg_replace('/[^a-z\.\-\_]/i', '_', $file);
    
    var_dump($file);
    ?>
    

    Shows:

    string(26) "__________ashdgf______.pdf"
    

    If \ and ^ are acceptable charaters, then use this:

    <?php
    header('Content-Type: text/plain');
    
    $file = 'folder\as!@#$%^&*()ashdgf$%^&*(.zip';
    
    $file = preg_replace('/[^a-z\.\-\_\\\\^]/i', '_', $file);
    
    var_dump($file);
    ?>
    

    Shows:

    string(35) "folder\as_____^____ashdgf__^___.zip"
    

    You may add any other escaped symbols from whitelist to this expression.