PHP, UTF-8, IIS и загрузка файла - PullRequest
2 голосов
/ 16 марта 2012

Я использую PHP 5.3 с MSSQL-Server 2005 и драйвером MSSQL-Server (PDO) от MS.

Недавно я немного боролся с новой версией драйвера и кодировкой, которую он использует для передачи данных из БД. Поэтому я решил настроить все приложение на UTF-8, чтобы избежать подобных проблем в будущем.

Поэтому я изменил базу данных для использования типов данных unicode, настроил заголовок HTML и настроил Eclipse для сохранения кодовых файлов в формате UTF-8. Также я добавил соответствующий тег accept-charset во все мои HTML-формы. Все идет нормально. Все работало, как и ожидалось, но теперь я застрял с новой проблемой.

Я написал простой скрипт, который может загружать файлы с помощью HTML-формы и сохранять их на моем веб-сервере (Windows Server 2003 с IIS6). Это работало отлично, пока я не переключился на UTF. Когда я загружаю файл со специальными символами в имени файла, они не сохраняются правильно. При добавлении файла с именем «ÄÖÜ.txt» на моем веб-сервере появляется файл с именем «Ã„ à – Ãœ.txt ". Это может быть проблемой, потому что вся дальнейшая обработка этих файлов зависит от гиперссылок, которые больше не являются правильными.

Я пробовал несколько возможных решений, таких как:

$isMoved = move_uploaded_file($_FILES['uploadedFile']['tmp_name'],"myFolder". utf8_encode($_FILES['uploadedFile']['name']));

Но я всегда получаю правильное имя файла в файловой системе сервера или другое.

Есть идеи? : D

Заранее спасибо Daniel

Ответы [ 2 ]

0 голосов
/ 13 августа 2015

Используя PHP 5.6 с IIS8 в Windows Sever 2012, мне наконец удалось получить файлы с умлаутами, которые правильно загружены, показаны и загружены с помощью

$filename = mb_convert_encoding(basename($_FILES['file']['name']),'ISO-8859-1', 'UTF-8');

в моем сценарии загрузки и

$filename = utf8_encode(basename($file));

в моем сценарии отображения и загрузки.

Когда такой загруженный файл должен быть удален, имя файла, переданное unlink, возможно, придется снова преобразовать в ISO-8859-1, используя mb_convert_encoding.

0 голосов
/ 24 апреля 2012

если я не полностью не прав, имя файла кодируется в UTF-8.Просто расшифруйте его, используя mb_convert_encoding ():

$filename = mb_convert_encoding($_FILES['uploadedFile']['name'], 'ISO-8859-1', 'UTF-8');
$isMoved = move_uploaded_file($_FILES['uploadedFile']['tmp_name'], "myFolder".$filename);

BurninLeo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...