怎么打开这个文件?

时间:2013-07-16 20:38:15

标签: php linux filenames non-ascii-characters

不幸的是,我允许用户首先将文件上传到服务器而不首先清理其名称(Linux,PHP,MySQL)。

上传的文件名之一是“E_M_20-06-2013_14-15_ComidasTípicas.zip”(它在MySQL数据库中是正确的,UTF-8编码)。

但是当我尝试在PHP中执行fopen()时,我无法找到此文件。根据区域设置(LANG),我检索不同的文件名,如下所示:

    $ export LANG=pt_BR.UTF-8
    $ ls ../web/downloads/E_M_20-06-2013_14-15_ComidasT*
    ../web/downloads/E_M_20-06-2013_14-15_ComidasTípicas.zip

    $ export LANG=pt_BR.ISO-8859-1
    $ ls ../web/downloads/E_M_20-06-2013_14-15_ComidasT*
    ../web/downloads/E_M_20-06-2013_14-15_ComidasT▒?­picas.zip

    $ export LANG=C                             
    $ ls ../web/downloads/E_M_20-06-2013_14-15_ComidasT*
    ../web/downloads/E_M_20-06-2013_14-15_ComidasT????picas.zip

有人可以帮助我发现如何使用PHP打开此文件吗?

PS:当然,我已经尝试过utf8_encode,utf8_decode,没有成功。

提前致谢!

2 个答案:

答案 0 :(得分:0)

编写一个脚本来查找文件并重命名文件而不会损坏字符(非字母数字和下划线)

检查scandir以查找文件http://php.net/manual/en/function.scandir.php

检查此主题以查找非字母数字字符PHP Regular expression - Remove all non-alphanumeric characters

因此,您将获得干净的文件名,并在数据库中写入。如果需要,您也可以在数据库字段上执行相同的操作。

答案 1 :(得分:0)

请尝试使用:

$ export LANG=en_US.UTF-8

这意味着在php中:

setlocale(LC_ALL, 'en_US.UTF8');