неправильно скачиваются русские файлы с ссылкой rawurlencode($file)

moggucci

Guest
неправильно скачиваются русские файлы с ссылкой rawurlencode($file)

Столкнулся с точно такой же проблемой, что и Maxon по ссылке:
Ссылки на русские файлы
Проблема не была решена.

Итак, проблема:
Необходимо разместить на странице несколько ссылок на файлы, хранящиеся на сервере, с
русскими именами.
Переименовывать файлы в транслит - не предлагать.
Как на страничке, содержащей несколько ссылок на файлы, передать header с заранее предопределенным для браузера названием файла - не представляю.

Пользуюсь следующим кодом:
PHP:
$dir = opendir("../upload"); 

while($file = readdir($dir))    { 
if(($file != ".") && ($file != ".."))    { 

echo "<a href=./upload/" . rawurlencode($file) . ">" . $file. "</a>"; 

    } 
} 

closedir($dir);
Ссылки генерируюстся и скачиваются даунлоад менеджером с правильными названиями файлов, а вот эксполрером русские файлы не скачиваются - предлагает сохранить с пустым именем.
При наведении на гиперссылку на файл в строке состояния эксплорера имя файла в абракадабре. Такую же абракадабру, т.е. именно такую же последовательность символов, можно увидеть в самом браузере эксплорер в названии ссылки - в нашем случае совпадает с названием файла, если выбрать кодировку Western European (ISO). В хтмл результате ссылка выглядит например так:
<a href=./files/%C0%EC%E5%E3%E0%20-%20%CB%E5%F2%E0%F2%FC.mp3>Амега - Летать.mp3</a>
Подозреваю, что нужно сделать преобразование кодировок в названии файла из Western European (ISO) в Cyrillic Windows. какие значения параметров нужно передать в iconv?

-~{}~ 21.02.07 16:49:

Короче - эксплорер вместо
Амега - Летать.mp3
видит
&#192;&#236;&#229;&#227;&#224; - &#203;&#229;&#242;&#224;&#242;&#252;.mp3.
Как преобразовать кодировку?
 

dacuan

Новичок
moggucci
Попробуйте в перед генерацией перечня файлов сделать
PHP:
setlocale(LC_ALL, "ru_RU.CP1251")
 

dacuan

Новичок
Такой код заработал у меня. KOI8-R - кодировка файловой системы

PHP:
<html>
<head>
    <title></title>
    <meta HTTP-EQUIV="Content-type" content="text/html; charset=windows-1251">
</head>
<body>
<?
$dir = opendir("./");

while($file = readdir($dir))    {
    if(($file != ".") && ($file != ".."))    {
        $fname = iconv("koi8-r", "windows-1251", $file);
        echo "<a href=\"" . rawurlencode($file) . "\">" . $fname. "</a><br>";
    }
}

closedir($dir);
?>
</body>
</html>
 

moggucci

Guest
'ISO-8859-1' - это Western European (ISO)?
PHP:
echo "<a href=./files/" . rawurlencode(iconv('ISO-8859-1','CP1251',$file)) . ">" . $file. "</a><br>";
и
PHP:
echo "<a href=./files/" . rawurlencode(iconv('CP1251','ISO-8859-1',$file)) . ">" . $file. "</a><br>";
не спасают ситуацию.
Еще раз: похоже, что текст ссылки (win1251), закодированный с помощью
PHP:
rawurlencode
эксплорер после раскодирования принимает в кодировке Western European (ISO). Как этого избежать?

-~{}~ 21.02.07 17:40:

dacuan, сейчас попробую у себя )
 

moggucci

Guest
Где взять список всех параметров к iconv?
 

bgm

&nbsp;
1) Ссылки не надо кодировать - пиши их такими, какие есть.

2) А файлы отдавай или скриптом или перенаправлением через .htaccess
 
Сверху