Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблема с url адресом

85K
05 ноября 2012 года
Yoja
6 / / 05.11.2012
Здравствуйте!
Хочу получить код 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
8
05 ноября 2012 года
mfender
3.5K / / 15.06.2005
Да вобщем-то далеко ходить не надо, примеров навалом.
Следует исходить из того, что 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;
Ну и применение:
url = UrlEncode('.../zamok-knock-nВ'lock-p-321.html');
85K
05 ноября 2012 года
Yoja
6 / / 05.11.2012
я еще выяснил, что в подобных URL (я выснил перед апострофом стоит русская буква B)
но ord(B) показывает код 1042
8
05 ноября 2012 года
mfender
3.5K / / 15.06.2005
Всё правильно показывает. 0412 в шестнадцатиричном коде.
Хочу дополнить, своё комментарий: он не решает всех проблем.
Правильно весь URL разобрать на: sheme, host, path, query. Query тоже разобрать. Ещё есть Anchor'ы, которые не учтены.
Меня аж заинтриговал вопрос. Надо написать class для трепанации URL. Их множество есть, но мы не ищем лёгких путей! :D Пока сам не попишешь - ничего не вникнешь )))
85K
06 ноября 2012 года
Yoja
6 / / 05.11.2012
Anchor'ы - я не встретил, на сайте.

Функция UrlEncode выдала такой результат

/zamok㈥Dknock㈥Dnㄥ2㈥7lock㈥Dp㈥D321.html
8
06 ноября 2012 года
mfender
3.5K / / 15.06.2005
Нормальный результат. Можно в массив подставить ещё "-"
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог