不幸的是,我允许用户上传文件到服务器,而无需首先清除其名称(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打开这个文件吗?
附言:当然,我试过utf8_encode,utf8_decode,没有成功。
提前感谢!
编写一个脚本,查找文件并重命名没有损坏字符(非字母数字和下划线)的文件
检查scandir以查找文件http://php.net/manual/en/function.scandir.php
检查此线程以查找非字母数字字符PHP正则表达式-删除所有非字母数字的字符
因此,您将获得干净的文件名和写入数据库的内容。如果需要,您也可以对数据库字段执行相同的操作。
请尝试使用:
$ export LANG=en_US.UTF-8
这意味着在php:中
setlocale(LC_ALL, 'en_US.UTF8');