Ссылки на русские файлы

maxon

Новичок
Ссылки на русские файлы

Вывожу содержимое директории на экран в виде ссылок на файлы1.

Чтобы ссылки правильно кликались делаю rawurlencode($file).

При клике по ссылке на файл "русский.doc" получаю слудующее:

IE - сохранить файл ".doc"
Opera - сохранить файл "%F0%F3%F1%F1%EA%E8%E9.doc"
Firefox - сохранить файл "русский.doc"

Как сделать, чтобы во всез браузерах работало нормально.
 

Exel

Новичок
Я знаю как сделать так, чтобы об этом не думать -
хранить имена файлов в транслите. А повлиять на серверной стороне на поведение различных браузеров, я думаю, не получится.
 

RigVan

Постоянный член клуба
Exel
Блин, а причем здесь броузер вообще?


maxon
Тебе настройки сервера смотреть надо. И скрипт писать исходя из этого.... Представь, что все это должно происходить без участия броузера, а потом тот же скрипт адаптируешь..
Кинь код, а то честно говоря вообще не совсем понятно, что ты пытаешся сделать...
 

svetoslav

Новичок
у меня проблема с созданием ссылок на русские файлы и директории, расположенные на фтп. хранятся ссылки в utf-8 (бд mysql) и сама страница в utf-8.

Попытки анализа всевозможных пользовательских функций а также комбинирование их с различными iconv, urlencode/rawurlencode ещё больше запутали.

оригинал ftp://10.20.2.158/тест
то что выводится если без преобразований вывести ссылку из базы - ftp://10.20.2.158/%D1%82%D0%B5%D1%81%D1%82
если заходить на фтп браузером то ссылка выглядит так (windows-1251) - ftp://10.20.2.158/%F2%E5%F1%F2

По идее необходимо UTF-8 -> windows-1251 -> URL, при этом оставив слеши...
 

SiMM

Новичок
> По идее необходимо UTF-8 -> windows-1251 -> URL
И в чём проблема?
 

svetoslav

Новичок
urlencode конвертит слэши. заменять обратно на слеш сконвертированный символ? или есть более элегантное решение?

и потом urlencode и rawurlencode добавляют слэш в конце, который тоже придётся удалять.

PHP:
str_ireplace("%2f", "/", rawurlencode(iconv("UTF-8", "windows-1251", "/тест")));
PHP:
str_ireplace("%2f", "/", urlencode(iconv("UTF-8", "windows-1251", "/тест")));
- дают левый результат
 

svetoslav

Новичок
Автор оригинала: WP
Заменять.

-~{}~ 11.12.06 09:14:

Какой левый?
мда. действительно работает. огромное спасибо, наверняка заработался...

решил сделать так:

PHP:
implode("/", array_map("rawurlencode", explode("/", iconv("UTF-8", "windows-1251", $dir_path))));
 

maxon

Новичок
maxon
Тебе настройки сервера смотреть надо. И скрипт писать исходя из этого.... Представь, что все это должно происходить без участия броузера, а потом тот же скрипт адаптируешь..
Кинь код, а то честно говоря вообще не совсем понятно, что ты пытаешся сделать... [/QUOTE]
Сижу на apache-1.3.33_2 их портов.
Код такой:

PHP:
$dir = opendir("../upload");

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

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

	}
}

closedir($dir);
Просто распечатываю список загруженных файлов из папки upload (ОС FreeBSD).
При выводе на экран использую rawurlencode, чтобы ссылки на русскоименные файлы работали нормально.
Но при использовании ссылки на русский файл "русский файл.doc" мне предлагают сохранить файл с именем ".doc", т.е. при передаче имени файла в форму сохранения файлов, терются кириллические символы.
 

CHEM_Eugene

Новичок
Автор оригинала: maxon
Просто распечатываю список загруженных файлов из папки upload (ОС FreeBSD).
При выводе на экран использую rawurlencode, чтобы ссылки на русскоименные файлы работали нормально.
Но при использовании ссылки на русский файл "русский файл.doc" мне предлагают сохранить файл с именем ".doc", т.е. при передаче имени файла в форму сохранения файлов, терются кириллические символы.
Так нашли ответ или нет? У меня такая же проблема.
 

OZ

Новичок
Автор оригинала: CHEM_Eugene
Так нашли ответ или нет? У меня такая же проблема.
И что ты предпринял, чтобы её решить? Раздражают такие "просители помощи".

Попробуйте:
PHP:
header("Content-Disposition: attachment; filename=здесь.имя");
header("Content-type: application/octet-stream");
readfile('путь к файлу');
exit;
 
Сверху