InternetCanonicalizeUrlA 函数 (wininet.h)

规范化 URL,包括将不安全字符和空格转换为转义序列。

语法

BOOL InternetCanonicalizeUrlA(
  [in]      LPCSTR  lpszUrl,
  [out]     LPSTR   lpszBuffer,
  [in, out] LPDWORD lpdwBufferLength,
  [in]      DWORD   dwFlags
);

参数

[in] lpszUrl

指向包含规范化的 URL 的字符串的指针。

[out] lpszBuffer

指向接收生成的规范化 URL 的缓冲区的指针。

[in, out] lpdwBufferLength

指向包含 lpszBuffer 缓冲区大小(以字符为单位)的变量的指针。 如果函数成功,此参数将接收实际复制到 lpszBuffer 缓冲区的字符数,该缓冲区不包括终止 null 字符。 如果函数失败,此参数将接收缓冲区所需的大小(以字符为单位),其中包括终止 null 字符。

[in] dwFlags

控制规范化。 如果未指定任何标志,该函数会将所有不安全字符和元序列(如 .,\ ..和 ...)转换为转义序列。 此参数可以是下列值之一。

价值 意义
ICU_BROWSER_MODE
不对“#”或“?”后面的字符进行编码或解码,并且不会删除“?”后面的尾随空格。 如果未指定此值,则会对整个 URL 进行编码并删除尾随空格。
ICU_DECODE
在分析 URL 之前,将所有 %XX 序列转换为字符,包括转义序列。
ICU_ENCODE_PERCENT
对遇到的任何百分比符号进行编码。 默认情况下,不会对百分比符号进行编码。 此值在 Internet Explorer 5 及更高版本中Microsoft可用。
ICU_ENCODE_SPACES_ONLY
仅对空格进行编码。
ICU_NO_ENCODE
不将不安全字符转换为转义序列。
ICU_NO_META
不要从 URL 中删除元序列(如“.”和“..”。

返回值

如果成功,则返回 TRUE;否则返回 FALSE。 若要获取扩展的错误信息,请调用 GetLastError 函数。 可能的错误包括以下内容。

返回代码 描述
ERROR_BAD_PATHNAME
无法规范化 URL。
ERROR_INSUFFICIENT_BUFFER
规范化 URL 太大,无法容纳提供的缓冲区。 lpdwBufferLength 参数设置为保存规范化 URL 所需的缓冲区的大小(以字节为单位)。
ERROR_INTERNET_INVALID_URL
URL 的格式无效。
ERROR_INVALID_PARAMETER
字符串、缓冲区、缓冲区大小或标志参数无效。

言论

在 Internet Explorer 4.0 及更高版本中,InternetCanonicalizeUrl 始终像设置 ICU_BROWSER_MODE 标志一样工作。 必须规范化整个 URL 的客户端应用程序应使用 CoInternetParseUrl(操作 PARSE_CANONICALIZE 和标志 URL_ESCAPE_UNSAFE),或 UrlCanonicalize

InternetCanonicalizeUrl 默认始终进行编码,即使指定了 ICU_DECODE 标志。 若要在不重新编码的情况下解码,请使用 ICU_DECODE | ICU_NO_ENCODE。 如果在不使用 ICU_NO_ENCODE的情况下使用 ICU_DECODE 标志,则会在分析之前对 URL 进行解码;然后,在分析后重新编码不安全字符。 此函数处理任意协议方案,但为此,它必须从不安全字符集进行推理。

使用 Internet Explorer 3.0 时(或在为 Internet Explorer 5 及更高版本设置 ICU_ENCODE_PERCENT 标志时)调用 InternetCanonicalize Url 的应用程序应跟踪此函数在特定 URL 上的使用情况。 如果 URL 中的不安全字符已转换为转义序列,请使用 InternetCanonicalizeUrl URL(无标志)再次导致转义序列转换为另一个转义序列。 例如,URL 中的空白空间将转换为转义序列 %20。 在 URL 上再次调用 InternetCanonicalizeUrl 将导致转义序列 %20 转换为转义序列 %2520,因为 % 符号是为转义序列保留的不安全字符,并由函数替换为转义序列 %25。

与 WinINet API 的其他所有方面一样,不能从 DllMain 或全局对象的构造函数和析构函数中安全地调用此函数。

注意 WinINet 不支持服务器实现。 此外,不应从服务使用它。 对于服务器实现或服务,请使用 Microsoft Windows HTTP 服务(WinHTTP)
 

注意

wininet.h 标头将 InternetCanonicalizeUrl 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的 约定。

要求

要求 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 窗户
标头 wininet.h
Wininet.lib
DLL Wininet.dll

另请参阅

处理统一资源定位符

WinINet 函数