![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
кириллица в ссылке [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? Может есть идеи?