PHP +MySQL 无法存储以汉字开头的文件名

2017-09-21 17:59:45 +08:00
 Aidea

在 PHP 中使用

mb_detect_encoding($name, array('ASCII','GB2312','GBK','UTF-8'))

输出文件名的编码,出现了三种结果:UTF-8CP936EUC-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() 你大爷的

1485 次点击
所在节点    PHP
1 条回复
HMSQQbA
2017-09-21 22:11:10 +08:00
v2ex 自动给中英文间加空格

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX