Как правильно очистить имя файла при загрузке в TYPO3?

Когда я загружаю файл с плохим (или "utf8-ly") именем в новой установке TYPO3 7.6, я получаю символы подчеркивания вместо прописанных специальных символов.

Например. имя файла Bräm!.png очищается до Bra__m_.png. Я бы ожидал Braem.png.

Локаль сервера выглядит нормально:

LANG=de_CH.UTF-8
LC_CTYPE="de_CH.UTF-8"
LC_NUMERIC="de_CH.UTF-8"
LC_TIME="de_CH.UTF-8"
LC_COLLATE="de_CH.UTF-8"
LC_MONETARY="de_CH.UTF-8"
LC_MESSAGES="de_CH.UTF-8"
LC_PAPER="de_CH.UTF-8"
LC_NAME="de_CH.UTF-8"
LC_ADDRESS="de_CH.UTF-8"
LC_TELEPHONE="de_CH.UTF-8"
LC_MEASUREMENT="de_CH.UTF-8"
LC_IDENTIFICATION="de_CH.UTF-8"
LC_ALL=

В localConfiguration у нас есть

'systemLocale' => 'de_CH.UTF-8',

И даже в php.ini пробовал

intl.default_locale = de_CH.UTF-8

Тем не менее, никакого «правильного» переименования, как я ожидал, переименования файла Bräm!.png в Braem.png или, по крайней мере, Braem_.png.

Где еще я мог посмотреть?


person Urs    schedule 28.10.2016    source источник
comment
PS Я хочу избежать использования файловой системы utf 8   -  person Urs    schedule 29.10.2016


Ответы (2)


Из того, что вы описываете, имя файла закодировано не в UTF-8, а в однобайтовом наборе символов (например, ISO-8859-1). В \TYPO3\CMS\Core\Resource\Driver\LocalDriver::sanitizeFileName() используется UTF-8, если вы используете его в бэкенде (то же самое для старых функций обработки файлов).

В этом случае «ä» не является допустимым многобайтовым символом UTF-8 и поэтому заменяется символами подчеркивания.

person Jigal van Hemert    schedule 31.10.2016
comment
Ой! Странно, хотя, поскольку я создал его на yosemite. Может быть, вы могли бы предоставить файл с правильно закодированным именем файла utf-8 для сравнения? Или наоборот, вы бы посмотрели файл, если я его куда-то загружу? - person Urs; 31.10.2016
comment
Глядя на код, кажется, что предполагается, что каждый специальный символ будет заменен на _ - без перезаписи, например. с ä по ae. Верный? Может что заставило меня ожидать более детальной санации какая-то память от 4.5? ... потому что в 6.2 это тоже просто подчеркивание - person Urs; 01.11.2016

Убедитесь, что [SYS][UTF8filesystem] = true в вашем LocalConfiguration.php

person minifranske    schedule 04.11.2016
comment
Я хотел бы избежать имен файлов utf-8, но предпочел бы более явную замену (ä-›ae или ä-›a). Вот почему я возился с локалью в первую очередь - person Urs; 04.11.2016
comment
Затем попробуйте отключить файловую систему utf8. Другие настройки, которые вы пробовали, здесь не помогут. - person minifranske; 04.11.2016
comment
Он отключен. Но я думаю, что мой вопрос поставлен неправильно, так как я, вероятно, прошу что-то, чего нет (замена символов, как в реальном URL). Спасибо, в любом случае! - person Urs; 04.11.2016
comment
В ядре нет решения, но есть сигнал/слот в resourceStorage, который вы можете использовать, чтобы очистить его так, как вы хотите, прежде чем он будет обработан драйвером. - person minifranske; 05.11.2016
comment
Круто, стимул делать первые шаги с сигналом/слотами! Я изучил несколько руководств (usetypo3.com/signals-and-hooks- in-typo3.html, github.com/einpraegsam/powermailextended), и я думаю, что как-то получил основы. Я включил класс, расширяющий resourceStorage, и попытался вызвать его из ext_localconf.php. Тем не менее, это ломается: загрузка длится вечно, и ничего не происходит. Вероятно, много ошибок в фоне. Может быть, вы могли бы быстро взглянуть на gist.github.com/ursbraem/3106b3605d368d76b2d63b826b0c1a11? - person Urs; 05.11.2016
comment
PS пока ничего делать не предполагается, просто посмотреть смогу ли поймать сигнал - person Urs; 05.11.2016
comment
Здесь вы можете найти несколько примеров регистрации слотов для использования сигналов, запускаемых resourceStorage bitbucket.org/franssaris/fs_media_gallery/src/ - person minifranske; 05.11.2016
comment
Посмотрите здесь git.typo3.org /TYPO3CMS/Extensions/image_autoresize.git/blob/ пример именно того слота, который вам нужен - person minifranske; 05.11.2016