Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с кодировками ссылок на ftp, В частности, для браузера IE 
:(
    Опции темы
AlexPet
Дата 14.1.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 5.12.2007
Где: Брянск

Репутация: нет
Всего: 1



Доброго времени суток!
Вот намучался с проблемой, а так и не разобрался.
Приходится генерировать ссылки на локальный фтп-сервер. Скрипт работает в локали koi8r, генерирует html-страницу тоже в этой кодировке. Все бы ничего, если бы некоторые ссылки не содержали русские символы.
Для браузера Firefox, как я выяснил, достаточно саму ссылку перекодировать в cp1251:
Код

use Encode;
$href = encode('cp1251', decode('koi8r', $href));

Для браузера Opera пришлось еще и заэскейпить (что не помешало этим ссылкам все равно работать в Firefox):
Код

use URI::Escape;
$href = uri_escape($href, "^A-Za-z0-9\-_.!~*'()/:"); #здесь я добавил к дефолтному набору еще '/' и ':', чтобы не эскейпились "хорошие" символы в пути

Но вот проблема! Никак не могу добиться, чтобы при щелчке на ссылку (которая ссылается на директорию на фтп), нормально происходило открытие этой директории в Internet Explorer (у меня версия 6.0). Как я понимаю, он просто исключает заэскейпленные символы из пути. Возможно ли вообще заставить его открывать ссылки на фтп?
(Если это тривиально, не ругайте меня, я только недавно столкнулся с проблемой кодировок...)

Это сообщение отредактировал(а) AlexPet - 14.1.2008, 16:39
PM MAIL ICQ Jabber   Вверх
nitr
Дата 14.1.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



AlexPet, или вы "чего-то не договорили" smile или неверно сформировали заголовок для страницы со ссылками к файлам. Добавьте  в заголовок и в мета-теги, что ваша страничка в KOI8-R кодировке.


--------------------
PM   Вверх
AlexPet
Дата 14.1.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 5.12.2007
Где: Брянск

Репутация: нет
Всего: 1



в заголовок http-ответа я ничего не посылаю
мета-тег:
Код

<meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />

вот такая получается ссылка (ftp://ftp.server.ru/Audio/Золотой фонд/Я встретил Вас):
Код

<a href="ftp://ftp.server.ru/Audio/%C7%EE%EB%EE%F2%EE%E9%20%F4%EE%ED%E4/%DF%20%E2%F1%F2%F0%E5%F2%E8%EB%20%C2%E0%F1">

Работает в Opera и Firefox
Отказывается работать в IE
Причем, если ссылка не на папку, а на файл, то обрабатывается всеми тремя браузерами одинаково...

Это сообщение отредактировал(а) AlexPet - 14.1.2008, 21:03
PM MAIL ICQ Jabber   Вверх
nitr
Дата 14.1.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



Сложно ответить, всё зависит от многих факторов, вот как на моей системе сработало (мод. ваш код):
Код
my $href = "Новая папка1/Новая папка2/"; 
print uri_escape(encode('koi8-r',decode('cp1251',$href)), "^A-Za-z0-9\-_.!~*'()/:");



--------------------
PM   Вверх
AlexPet
Дата 15.1.2008, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 5.12.2007
Где: Брянск

Репутация: нет
Всего: 1



В общем, на работе у меня в итоге получилось сделать для папок вида "ftp://ftpserver.ru/path_in_english/папочка", а вот для папок вида "ftp://ftpserver.ru/path_in_english/папочка/папочка2" - уже не работает. Причем работает в том случае, если НЕ применять ни decode\encode, ни url_escape. Возможно, это из-за прокси (какой-то древний squid). Еще попробую дома (там без прокси). Если будет работать для любого уровня вложенности русских папок, то буду делать выбором по $ENV{'HTTP_USER_AGENT'}, если нет - то и не судьба smile
PM MAIL ICQ Jabber   Вверх
nitr
Дата 15.1.2008, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



AlexPet, странно, но у меня работал именно ИЕ6. Но что вы хотите от браузера, который "каверкает все стандарты и создаёт свои" smile
Наверное специфика и присутсвует. Для тестов я создал папки в кои8-р на русском, затем html-страничку генерировал скриптом, всё ок в 3-х браузерах. По-моему это не прокси, а фтп специфичен.


--------------------
PM   Вверх
AlexPet
Дата 16.1.2008, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 5.12.2007
Где: Брянск

Репутация: нет
Всего: 1



В общем худо-бедно разобрался с проблемой.
Сделал так:
Код

$href = uri_escape(encode('cp1251', decode('koi8r', $href)), "^A-Za-z0-9\-_.!~*'()/:")
  if $ENV{'HTTP_USER_AGENT'} !~ /MSIE/; # т.е. в случае ИЕ ничего не перекодировал, ничего не эскейпил

Причем работает в ИЕ, только если щелкать на ссылку с нажатым Shift. На работе что-то не так либо со squid (почему-то грешу именно на него), либо на фтп-сервере (причем что, непонятно, почему он переходит по ссылке, если только в конце пути русская директория, если же ниже по иерархии, на ней и затыкается).
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1330 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.