2016-05-26 5 views
0

Wenn ich CMS-Dateien mit kyrillischen Namen hochlade, verschwinden kyrillische Symbole einfach. Zum Beispiel: Dateiname "мой_файл.txt" wird nur "txt" ohne "мой_файл." Dateiname hat Windows-1251-Codierung.Silverstripe: Probleme beim Hochladen von Dateien mit kyrillischen Namen

Firebug zeigt:

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=--- 

Und bei der Post Registerkarte zeigt:

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

Bitte geben Sie mir jede Hilfe.

Antwort

1

Sehen Sie sich FileNameFilter an, da dies die Logik ist, die eingehende/heruntergeladene Dateinamen "bereinigt".

Speziell auf seine $default_replacements private (Config) statisch. Da es sich um eine private Static-Datei handelt, kann sie in der benutzerlandspezifischen YML-Konfiguration geändert werden.

Die entsprechende Zeile ist auch für Sie kommentiert:

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

außer Kraft setzen diese in Ihre eigenen YML Config mit etwas, das den Bereich von Zeichen entspricht, die Ihr System akzeptieren.

+0

Ich habe 'Filenamen config.yml: default_use_transliterator: false default_replacements:' , räumte die Cache Manifest (Flush = all) und erhielt 'Achtung: Invalid argument für foreach geliefert() in/usr/home/smolin/silber/framework/core/manifest/ConfigManifest.php in Zeile 655'. Das Verhalten von FileNameFilter hat sich nicht geändert – alex

+0

Die gleiche Situation wie in [dieser Beitrag] (http://stackoverflow.com/questions/36944404/silverstripe-3-1-change-filenamefilter-default-replacements) – alex

+0

Wenn Sie wirklich definiert ' default_replacements "ohne etwas auf der rechten Seite, dann ist es fast sicher, dass SPL die ungültige YML nicht analysiert. Sie müssen * den ASCII-spezifischen Eintrag, der in 'FileNameFilter' des Kerns gefunden wird, durch Ihre eigene Regex ersetzen, basierend auf den Anforderungen Ihres Systems (d. H. Um kyrillische Zeichen einzuschließen). Alles, was Sie getan haben, ist, das default_replacements-Array als "leer" neu zu definieren und einen PHP-Fehler zu verursachen. – theruss