在 PHP 中使用
mb_detect_encoding($name, array('ASCII','GB2312','GBK','UTF-8'))
输出文件名的编码,出现了三种结果:UTF-8
、CP936
、EUC-CN
比如 “简体.zip ” 是 “ UTF-8 ”,“繁体.zip ” 是 “ CP936 ”,“年纪.zip ” 是 “ EUC-CN ”
打开数据库时指定编码:
mysql_query("set names 'utf8'")
截取文件名并指定编码:
mb_substr(basename($name),0,-4,'utf-8')
然后 insert 存储到数据库中,显示为空,就是什么都没有
然而
将文件名改为 “ a 简体.zip ”,“简体 1 繁体.zip ”,“ 年纪.zip ”,输出文件名的编码得到的结果和之前一致
存入数据库后分别为 a 简体,1 繁体, 年纪,除了前面的中文被截断,没有任何乱码现象
也就是说,MySQL 在存储文件名时如果以中文名开头则自动截断,直到遇到字母或数字为止
另附 MySQL 编码 show variables like "%char%"
信息
character_set_client utf8mb4
character_set_connection utf8mb4
character_set_database utf8mb4
character_set_filesystem binary
character_set_results utf8mb4
character_set_server latin1
character_set_system utf8
因为刚开始接触 PHP 和 MySQL,遇到问题都是谷歌百度,这个问题浪费了差不多一天的时间
而就在写完这篇主题即将发布时,自己做了最后的尝试,竟然给找到了原因,但是也不想就这么删了。。。
basename()
你大爷的
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.