Silverstripe:上传带有西里尔字母名称的文件时遇到问题

Silverstripe: Trouble with uploading files with cyrillic names

当我上传带有西里尔名称的 CMS 文件时,西里尔符号就消失了。 例如:文件名“мой_файл.txt”变成 "txt" 而没有“мой_файл”。 文件名有 windows-1251 编码。

Firebug 显示:

POST /admin/projects/Project/EditForm/field/Project/item/6/ItemEditForm/field/Projects/upload HTTP/1.1
Host: silver.rivreg.ru
User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Referer: http://silver.rivreg.ru/admin/projects/Project/EditForm/field/Project/item/6/edit
Content-Length: 377
Content-Type: multipart/form-data; boundary=---

并且在 Post 选项卡中显示:

Content-Disposition: form-data; name="SecurityID"
4754dec1aad707dd63e8cc58c8e469d0bc149425
-----------------------------81762142719766
Content-Disposition: form-data; name="Projects[Uploads][]"; filename="мой_Ñайл.txt"**
Content-Type: text/plain
ïîëïîïîïîïîïîïîîûûûûûûû
-----------------------------81762142719766--

请给我任何帮助。

看看 FileNameFilter 因为这是 "cleans-up" 传入/上传文件名的逻辑。

具体看其$default_replacementsprivate(config)static。因为它是私有静态的,所以可以在userland(自定义)YML配置中修改。

相关行甚至为您评论:

// remove non-ASCII chars, only allow alphanumeric plus dash and dot

在您自己的自定义 YML 配置中使用适合您的系统将接受的字符范围的内容覆盖它。