php - Mac和Windows上传文件名编码不同的问题

标签 php mysql windows macos encoding

从 Mac 上传文件与从 Windows 计算机上传文件时,php 中的 $_FILES['file'] 全局变量的编码不同。

我正在新更新的 Debian/Apache2 上使用 PHP7 开发一个脚本。它在更新之前可以工作,但现在无法从 Mac 上传文件。

该脚本用于接收上传文件,并将文件名存储在数据库(MariaDB/mySql)中

$filename = "$_FILES['files']";
$sql = "INSERT INTO upload_files (filename) VALUES ('$filename')";

当文件名包含非 ASCII 字符(例如 æøå)时,从 Windows 计算机上传文件时会正确执行此查询。但是从Mac上传文件时,编码不同,查询失败:

#1366 - Incorrect string value '\xCC\x8A...' for column filename....

最佳答案

十六进制CC8A是utf8,表示“COMBINING RING ABOVE”。也许接下来有一个元音?

也许某些东西默认为 latin1 或其他一些非 utf8 编码。很难说是什么,因为它是一个文件名,而不是表中的数据。

十六进制C385Å的utf8,相当于41CC8A,即A加一个环。如果您要使用前者,它可以(如果适用)转换为 latin1 字符。

关于php - Mac和Windows上传文件名编码不同的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57475937/

相关文章:

windows - 作为 Windows 服务的 Cassandra

没有证书的mysql ssl连接

mysql - 如何使用 MySQL 存储和改变位图/位集?

c# - 系统范围的 Windows CBT Hook 无法正常工作

php - PHP上的Sql查询问题?

php - 是否需要确保向 MySQL 数据库提交正确的数据类型?

php - ckeditor 与 jquery 更改事件

php - 在php中访问<<<HTML中定义的变量

mysql - 如何获得总天数

java - Android Studio 4.0:构建失败|请检查您是否安装了Windows Universal C Runtime