1

不幸的是,我允许用户将文件上传到服务器而无需先清理其名称(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,没有成功。

提前致谢!

4

2 回答 2

0

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

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

检查此线程以查找非字母数字字符PHP 正则表达式 - 删除所有非字母数字字符

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

于 2013-07-16T20:49:32.537 回答
0

请尝试使用:

$ export LANG=en_US.UTF-8

这意味着在php中:

setlocale(LC_ALL, 'en_US.UTF8');
于 2013-07-17T00:03:06.333 回答