在 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()
你大爷的
1
HMSQQbA 2017-09-21 22:11:10 +08:00 via Android
v2ex 自动给中英文间加空格
|