URL с именами файлов с акцентированными символами

На одном из моих PHP-сайтов у меня есть скрипт, который будет отображать изображение с сервера CentOS. Путь к изображению взят из базы данных MySQL. Файлы изображений, хранящиеся на сервере (и соответствующие записи в базе данных), имеют акцентированные символы и пробелы.

Поэтому, когда скрипт PHP пытается получить доступ к URL-адресу изображения, он возвращает ошибку «файл не найден». Когда я проверил журналы ошибок apache, я увидел, что акцентированные символы в именах файлов отображаются как «2-EDUCACI \ xc3 \ x93N SECUNDARIA-ACTIVIDAD ACAD \ xc3 \ x89MICA-VIAJE FIN DE CURSO (1) .jpg» (пример названия изображения «2-EDUCACIÓN SECUNDARIA-ACTIVIDAD ACADÉMICA-VIAJE FIN DE CURSO (1) .jpg»)

Если я попытаюсь получить список файлов через оболочку с настоящим именем файла, указанным в кавычках, я могу получить список. Но если я попытаюсь без указания имени файла, список будет показан с? отмечает вместо акцентированных символов в именах файлов.

Можете ли вы дать мне несколько советов по решению этого файла не найдена проблема. Я ищу решение, включающее либо изменение чего-либо в коде PHP, либо на самом сервере? У меня есть root-доступ к серверу.

Я уже сталкивался с некоторыми похожими вопросами и ответами в Интернете, но они касаются изменения кодировки имени файла на сервере (например, использование таких утилит, как convmv и т. Д.). Но в моем случае я не могу изменить имена файлов или кодировку. Эти файлы загружаются клиентами из их локальной системы, и поэтому я не могу настаивать на том, чтобы они использовали конкретное соглашение об именах или кодировку имен файлов. То, что я ищу, — это возможность достичь этого с помощью некоторых функций PHP или конфигураций Apache.

Любые вклады относительно этого высоко ценятся.

Спасибо & С уважением

Суджит

0

Решение

Похоже, что в какой-то момент во время вашего процесса у вас есть несовместимое кодирование символов, и ваши данные возвращаются с 8-битным кодированием Вам придется декодировать и перекодировать объект. Увидеть этот ответ для получения дополнительной информации.

0

Другие решения

Привет Испытали эту проблему, просто используйте функцию iconv следующим образом:

echo iconv("ISO-8859-1//TRANSLIT", "UTF-8", $lien);
-1