проблема с url адресом
Хочу получить код html страницы get запросом
в url адресе содержится знак апострофа, видно из-за этого и проблемы
Посылаю в запрос
url = '.../zamok-knock-nВ'lock-p-321.html'
Выдает Ошибку 404, нет такой страницы
Когда просматриваешь переменную содержащую url адрес через Ctrl+F7, то пишет что url = '.../zamok-knock-nВ''lock-p-321.html'
Как побороть этот недуг?
Delphi XE
Windows 7x64
Следует исходить из того, что URL состоит из букв латинского алфавита, арабских цифр, точек, двоеточия, подчёркивания и слэша. Всё остальное кодируется в Hex.
Отсюда, функция:
Код:
function UrlEncode(Str: string): string;
function CharToHex(Ch: Char): Integer;
asm
and eax, 0FFh
mov ah, al
shr al, 4
and ah, 00fh
cmp al, 00ah
jl @@10
sub al, 00ah
add al, 041h
jmp @@20
@@10:
add al, 030h
@@20:
cmp ah, 00ah
jl @@30
sub ah, 00ah
add ah, 041h
jmp @@40
@@30:
add ah, 030h
@@40:
shl eax, 8
mov al, '%'
end;
var
i, Len: Integer;
Ch: Char;
N: Integer;
P: PChar;
begin
Result := '';
Len := Length(Str);
P := PChar(@N);
for i := 1 to Len do
begin
Ch := Str[i];
if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '.', '_', '/', ':', '?'] then
Result := Result + Ch
else
begin
if Ch = ' ' then
Result := Result + '+'
else
begin
N := CharToHex(Ch);
Result := Result + P;
end;
end;
end;
end;
function CharToHex(Ch: Char): Integer;
asm
and eax, 0FFh
mov ah, al
shr al, 4
and ah, 00fh
cmp al, 00ah
jl @@10
sub al, 00ah
add al, 041h
jmp @@20
@@10:
add al, 030h
@@20:
cmp ah, 00ah
jl @@30
sub ah, 00ah
add ah, 041h
jmp @@40
@@30:
add ah, 030h
@@40:
shl eax, 8
mov al, '%'
end;
var
i, Len: Integer;
Ch: Char;
N: Integer;
P: PChar;
begin
Result := '';
Len := Length(Str);
P := PChar(@N);
for i := 1 to Len do
begin
Ch := Str[i];
if Ch in ['0'..'9', 'A'..'Z', 'a'..'z', '.', '_', '/', ':', '?'] then
Result := Result + Ch
else
begin
if Ch = ' ' then
Result := Result + '+'
else
begin
N := CharToHex(Ch);
Result := Result + P;
end;
end;
end;
end;
url = UrlEncode('.../zamok-knock-nВ'lock-p-321.html');
но ord(B) показывает код 1042
Хочу дополнить, своё комментарий: он не решает всех проблем.
Правильно весь URL разобрать на: sheme, host, path, query. Query тоже разобрать. Ещё есть Anchor'ы, которые не учтены.
Меня аж заинтриговал вопрос. Надо написать class для трепанации URL. Их множество есть, но мы не ищем лёгких путей! :D Пока сам не попишешь - ничего не вникнешь )))
Функция UrlEncode выдала такой результат
/zamok㈥Dknock㈥Dnㄥ2㈥7lock㈥Dp㈥D321.html
Нормальный результат. Можно в массив подставить ещё "-"