Обратно абсолютно точно так же. Только при сборке урла нужно убрать кодирование. По сути функция состоит из двух частей:Код | function EncodeUrl(url: string; code: Boolean = true): string; var u: URL_COMPONENTS; d, c: dword; hst, usr, pas, pth, ext: string; procedure ZeroStr(var s: string; var pch: PChar; var sz: dword); begin sz := INTERNET_MAX_PATH_LENGTH; SetLength(s, sz); FillChar(s[1], sz * SizeOf(Char), 0); pch := PChar(s); end; begin // Part 1 - Split URL - распилить URL на составляющие FillChar(u, SizeOf(u), 0); u.dwStructSize := sizeOf(u); // готовим структуру u (запчасти) для работы ZeroStr(hst, u.lpszHostName, u.dwHostNameLength); ZeroStr(usr, u.lpszUserName, u.dwUserNameLength); ZeroStr(pas, u.lpszPassword, u.dwPasswordLength); ZeroStr(pth, u.lpszUrlPath, u.dwUrlPathLength); ZeroStr(ext, u.lpszExtraInfo, u.dwExtraInfoLength); InternetCrackUrl(PChar(url), Length(url), ICU_DECODE, u); // ломает URL на части // Составляющие урла: hst, usr, pas, pth, ext // Part 2 - Combine URL - собрать URL из составляющих d := INTERNET_MAX_PATH_LENGTH; if code=true then c := ICU_ESCAPE else c := 0; // ICU_ESCAPE - кодировать URL, 0 - нет SetLength(result, d); FillChar(result[1], d * SizeOf(Char), 0); InternetCreateUrl(u, c, PChar(result), d); // Собирает URL из частей result := copy(result, 1, d); end; |
Пример:Код | var s: string; begin s := 'http://www.google.ru/search?q=Мама мыла раму'; // исходная строка s := EncodeUrl(s, true); // закодировали ShowMessage(s); // показали s := EncodeUrl(s, false); // раскодировали ShowMessage(s); // показали end; |
|