不幸的是,我允许用户首先将文件上传到服务器而不首先清理其名称(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,没有成功。提前致谢!
答案 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');