PHP Чтение и рендеринг имен файлов (со специальными символами) для загрузки - PullRequest
0 голосов
/ 20 января 2019

Я должен отобразить список файлов со ссылкой на них. Что я написал:

$path = "pdf/".$lang."/*";
$fileList = glob($path);

echo "<ul>";
foreach($fileList as $filename){
    $splitted = explode("/", $filename);
    echo '<li><a href="'.$filename.'">'.end($splitted).'</a>'; 
}
echo "</ul>";

Работает, если в именах файлов нет специальных символов. Если есть, отображается .

Я изменил код следующим образом:

$path = "pdf/".$lang."/";
$fileList = glob($path."*");

echo "<ul>";
foreach($fileList as $entry){
    $splitted = explode("/", $entry);
    $filename = iconv('WINDOWS-1252', 'UTF-8', end($splitted));
    echo '<li><a href="'.$path.$filename.'" target="_blank">'.$filename.'</a>'; 
}
echo "</ul>";

это решение работает только на локальном хосте. После того, как я опубликую его, специальные символы отображаются неправильно. Вместо ä он отображает ä. Как я могу решить это?

Edit:
Это не дубликат этого вопроса. Как я уже писал выше, я получаю не ¤.

Localhost и сервер работают в Windows. Версия PHP на локальном хосте 5.6.35. Сервер включен на 7.1.

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Я не совсем уверен, но возможно, что ваш файл на сервере закодирован в ISO-8859-1 вместо utf-8.

см. Этот вопрос в качестве ссылки: Шведские символы и UTF-8

Я написал ответ по этому вопросу, это второй ответ.

Попробуйте изменить метатег вашей кодировки на ISO-8859-1

0 голосов
/ 20 января 2019

Похоже, что имя файла затем дважды кодируется с помощью UTF-8 - какие настройки кодирования вы используете на своем сервере / локальном php?

...