Файлы на веб-серверах всегда должны храниться без пробелов (не "this is an image.jpg"), без умлаутов или специальных символов (не "football.jpg"), без обратных косых черт (не "work\car.jpg") и в нижнем регистре (не "test.JPG"). Однако недавно в рамках клиентского проекта мне пришлось получить доступ к большому количеству предопределенных файлов с произвольными именами и обработать их.
Системы Linux по умолчанию разрешают доступ к файлам с умляутами и специальными символами, поэтому здесь нет необходимости рассматривать какие-либо специальные функции. В системах Windows это выглядит совершенно иначе: здесь вам нужно использовать некоторые приемы и подключиться к интерфейсу COM. Прежде всего, вы включаете необходимое расширение в php.ini
[COM_DOT_NET] extension = php_com_dotnet.dll
один. Теперь используется очень полезный вспомогательный класс WinfsUtf8 , который значительно упрощает доступ к COM-объектам и отображает почти все функции PHP, влияющие на файлы. После интеграции файла с
require_once('WinfsUtf8.php');
есть все возможности доступа к файлам, например результаты
file_exists('ä.jpg');
неправильно ложь, тогда как
Patchwork\PHP\Override\WinfsUtf8::file_exists('ä.jpg');
возвращает истину.