2013-05-28 8 views
1

Я создаю Zip-архив, используя ZipArchive lib в PHP. Он работает хорошо, но если filename имеет запрещенные символы (например, «< ''> '), архив не имеет этого файла.Истинный (и простой) способ маскировать имена файлов в zip-архиве

Я могу только обрезать все несогласованные символы.

Я без мотивации. Любой другой способ (может быть, маска, но «\» и «^» не работает)?

Спасибо.

+0

'\' и '^' приемлемы? – BlitZ

+0

@CORRUPT '\' -yes для пути в архиве '^' -yes – Torv

+0

@Tovr проверить нижнюю часть может ответить тогда. – BlitZ

ответ

1

Вы можете попробовать использовать preg_replace() для этого:

<?php 
header('Content-Type: text/plain'); 

$file = '[email protected]#$%^&*()ashdgf$%^&*(.pdf'; 

$file = preg_replace('/[^a-z\.\-\_]/i', '_', $file); 

var_dump($file); 
?> 

Шоу:

string(26) "__________ashdgf______.pdf" 

Если \ и ^ являются приемлемыми Charaters, а затем использовать это:

<?php 
header('Content-Type: text/plain'); 

$file = 'folder\[email protected]#$%^&*()ashdgf$%^&*(.zip'; 

$file = preg_replace('/[^a-z\.\-\_\\\\^]/i', '_', $file); 

var_dump($file); 
?> 

Шоу:

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

Вы можете добавить любые другие символы, сбежавших из белого списка для этого выражения.

+0

хороший способ, но почему вы заменяете '_' за' _'? =) – Torv

+0

Я не. Все в '[^' и ']' не заменяется. Это белый список. – BlitZ

+0

ой, я терпеть неудачу. я всегда буду читать руководства перед комментарием =) – Torv