UTF8 не отображается должным образом после обработки PHP - PullRequest
1 голос
/ 16 августа 2011

У меня есть папка с именем «同» (не имеет значения, какой символ я использую или сколько), после того, как вы подняли ее с помощью php, отображается неправильный символ или искаженный текст.

<?php
mb_internal_encoding('utf-8');
if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        echo $file;
    }
}
closedir($handle);
}
echo "同";
?>

Возвращает:

Folder1index.php��同

Он отображает 2 «символа», как если бы он не был правильно закодирован в UTF-8. Браузер корректно обрабатывает страницу как UTF-8 из-за эха соответствующего символа.

Это проблема с php / code или что-то еще мешает его правильному отображению? (IIS и т. Д.)

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Проблема не в кодировке UTF-8 ваших сценариев или веб-сайта, проблема, скорее всего, заключается в кодировании имен файлов в вашей файловой системе.

Сначала вам нужно узнать, какая кодировка используетсяна уровне файловой системы.Если вы знаете, вы можете перекодировать закодированные имена файлов в UTF-8 (например, iconv; mb_convert_encoding).Тогда они будут хорошо отображаться на вашем сайте.

Вы пишете, что используете IIS, поэтому я предполагаю, что вы работаете в Windows.Пожалуйста, смотрите этот связанный ответ и / или связанный вопрос Какую кодировку имен файлов в NTFS хранят как? для получения дополнительной информации.

1 голос
/ 16 августа 2011

Вот отличная ветка по обработке имен файлов utf-8 в php - Как использовать функции файловой системы в PHP, используя строки UTF-8?

Для сортировки вам необходимо вызвать urlencode / urldecode для имен файлов. Однако рекомендуется использовать модуль транслитерации drupal - Различная кодировка на другом сервере?

...