从 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/