Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

кириллица в ссылке [D6, WinXP]


marcel ©   (2005-10-07 10:36:00) 

Имеется у меня следующее.
WinXP, Apache 2.0.43. CGI-приложение написанное на Дельфи(далее project1.exe).
Во такая у меня проблемы.  
project1.exe формирует HTML-страничку, где сть ссылка подобного вида .....project1.exe?var1=наименование. Т.е. значение переменной var1 - строка, состоящая из кириллицы. При переходе на эту ссылку в адресной строке кириллическое значение заменяется кодами вида %ХХ. Скриптом все обрабатывается нормально, даннные выдаются корректные. Но только если пользоваться браузером Opera или Firefox. Если же Internet Explorer'ом, то при переходе на такую ссылку в адресной строке отображается кириллица так как есть, но в скрипт попадает тарабарщина %ХХ. Когда разрабатывался project1.exe (года два назад. тогда правда Apache стоял на Win98) в Эксплорере все проверялось и все работало. В какой момент появился глюк - сказать не могу, т.к. сам прользуюсь Oper'ой - а там все работает. Вопрос в следующем - что делать? :)
1. Можно ли что-то указать в настройках Explorer'a, Apache?
2. Можно проверять с какого браузера было обращение и перекодировать соответствующие поля, но....Где взять соответствующую таблицу перекодировки или хотя бы по каким ключевым словам искать в инете?

Прбовал менять в свойствах Explorer'a "Всегда отправлять адреса в UTF-8". Не помогло.


marcel   (2005-10-10 11:28:00) [1]

>ShiFT
Такой ф-ции не нашел. Написал свою. Все элементарно. Вроде работает при любых комбинациях браузер/операционка.

function StringToHex(s:string):string;
var i:word;
   sResult:string;
begin
 sResult:='';
 for i:=1 to length(s) do
   sResult:=sResult+'%'+IntToHex(ord(sResult[i]),2);
 Result:=sResult;
end;


Но факт остается фактом. Если через IE переходить по ссылке с чистой кириллицей к Apache на XP, то с кодировкой не лады. Может кто-то у попробует смоделировать?


ShiFT   (2005-10-10 10:17:00) [2]

uses HTTPApp;

URI := 'project1.exe?var1=' + HTMLEncode('наименование');


ShiFT   (2005-10-10 10:15:00) [3]

uses HTTPApp
URI := 'project1.exe?var1=' HTMLEncode('наименование');


marcel   (2005-10-10 09:59:00) [4]

Я вас немножко обманул. %хх здесь практически не причем.
Сдается мне, что когда IE отправляет запрос к Apache(WinXP), то  кириллица перекодируется в ...даже не знаю, UTF-8, что ли?
Т.е. на страничке и в HTML коде вместо
"Привет я тут",
выводится
"I?eaao y ooo"
А когда Apache на Win98, то такой байды не происходит, хотя обращаешься из тогоже окна IE.
Можно в web-приложении как-то определить/перекодировать ответ из Юникода в 1251? Или может IE или Apache как-нить рога вправить?


denissoft   (2005-10-09 18:29:00) [5]

function FormatStringforCGI(str: string): string;
var
  i: integer;
begin
  for i := 1 to Length(str) do
  begin
    if str[i] in ['a'..'z', 'A'..'Z', '0', '1'..'9'] then
      Result := Result + Str[i]
    else if Str[i] = ' ' then
      Result := Result + '+%20+'
    else
      Result := Result + '%' + IntToHex(Byte(Str[i]), 2);
  end;
end;


atruhin   (2005-10-09 10:56:00) [6]

>>2. Можно проверять с какого браузера было обращение и перекодировать >>соответствующие поля, но....Где взять соответствующую таблицу >>перекодировки или хотя бы по каким ключевым словам искать в инете?
Описание HTTP протокола. Никакой таблицы в принципе не нужно. Формат %код символа. Примерно так:
Tmp := Pos('%', fAddress); // восстанавливаем шестнадцатиричные символы
while Tmp <> 0 do begin
     try
       Ch := StrToInt('$'+copy(fAddress,Tmp + 1, 2));
       fAddress[Tmp] := char(Ch);
       delete(fAddress, Tmp + 1, 2);
     except
     end;
     Tmp := Pos('%', fAddress);
end;


marcel   (2005-10-07 10:52:00) [7]

Пока писал вопрос - осенило и попоробовал следующее.
Запустил подобную ситуацию где Apache на  Win98. Здесь в Explorer'e все замечательно работает. Т.е. проблема в том, что Apache у меня на XP? Может есть идеи?


Наверх

Титульная страница Поиск, карта сайта Написать письмо