Функция UrlCanonicalizeA (shlwapi.h)
Преобразует строку URL-адреса в каноническую форму.
Синтаксис
LWSTDAPI UrlCanonicalizeA(
[in] PCSTR pszUrl,
[out] PSTR pszCanonicalized,
[in, out] DWORD *pcchCanonicalized,
DWORD dwFlags
);
Параметры
[in] pszUrl
Тип: PCTSTR
Указатель на строку максимальной длины, заканчивающуюся значением NULL, INTERNET_MAX_URL_LENGTH, содержащую строку URL-адреса. Если строка не ссылается на файл, она должна содержать допустимую схему, например http://.
[out] pszCanonicalized
Тип: PTSTR
Указатель на буфер, который при успешном возвращении этой функции получает преобразованный URL-адрес в виде строки, заканчивающейся null.
[in, out] pcchCanonicalized
Тип: DWORD*
Указатель на значение, которое при входе задается на количество символов в буфере pszCanonicalized .
dwFlags
Тип: DWORD
Флаги, указывающие способ преобразования URL-адреса в каноническую форму. Можно объединить следующие флаги.
URL_UNESCAPE (0x10000000)
Отмена экранирования всех escape-последовательностей, содержащихся в URL-адресах, с двумя исключениями. Escape-последовательности для "?" и "#" не отменяются. Если также задан один из флагов URL_ESCAPE_XXX, два URL-адреса сначала отменяются, затем объединяются, а затем экранируются.
URL_ESCAPE_UNSAFE (0x20000000)
заменяют небезопасные символы на escape-последовательности. Небезопасные символы — это символы, которые могут быть изменены во время передачи через Интернет и включают символы (<, >", ", #, {, }, |, , ^, [, ], и '). Этот флаг применяется ко всем URL-адресам, включая непрозрачные URL-адреса.
URL_PLUGGABLE_PROTOCOL (0x40000000)
Объединение URL-адресов с подключаемыми протоколами, определяемыми клиентом, в соответствии со спецификацией W3C. Этот флаг не применяется к стандартным протоколам, таким как FTP, HTTP, Gopher и т. д. Если этот флаг установлен, UrlCombine не упрощает URL-адреса, поэтому нет необходимости также задавать URL_DONT_SIMPLIFY.
URL_ESCAPE_SPACES_ONLY (0x04000000)
заменяют только пробелы на escape-последовательности. Этот флаг имеет приоритет над URL_ESCAPE_UNSAFE, но не применяется к непрозрачным URL-адресам.
URL_DONT_SIMPLIFY (0x08000000)
обрабатывают "/./" и "/../" в строке URL-адреса как символы-литералы, а не сокращение для навигации. Дополнительные сведения см. в разделе Примечания.
URL_NO_META (0x08000000)
Определяется как то же, что и URL_DONT_SIMPLIFY.
URL_ESCAPE_PERCENT (0x00001000)
преобразуют все вхождения "%" в escape-последовательность.
URL_ESCAPE_AS_UTF8 (0x00040000)
Windows 7 и более поздних версий. Процент кодирования всех символов, отличных от ASCII, в качестве эквивалентов UTF-8.
Возвращаемое значение
Тип: HRESULT
Если эта функция выполняется успешно, она возвращает S_OK. В противном случае возвращается код ошибки HRESULT .
Комментарии
Эта функция выполняет такие задачи, как замена небезопасных символов их escape-последовательности и свертывание таких последовательностей, как ".....".
Если строка URL-адреса содержит "/.. /" или "/./" UrlCanonicalize обрабатывает символы как указывающие на навигацию в иерархии URL-адресов. Функция упрощает URL-адреса перед их объединением. Например, "/hello/cruel/.. /world" упрощен до "/hello/world". Исключения из этого поведения по умолчанию возникают в следующих случаях:
- Если флаг URL_DONT_SIMPLIFY установлен в dwFlags, функция не упрощает URL-адреса. В данном случае : "/hello/cruel/.. /world" остается как есть.
- Если "/.. /" или "/./" является первым сегментом в пути (например, "http://domain/../path1/path2/file.htm"), UrlCanonicalize выводит путь точно так же, как входные данные.
Примечание
Заголовок shlwapi.h определяет UrlCanonicalize в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.
Требования
Минимальная версия клиента | Windows 2000 Professional, Windows XP [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | shlwapi.h |
Библиотека | Shlwapi.lib |
DLL | Shlwapi.dll (версия 5.0 или более поздняя) |