[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

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

在 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 标志时调用 InternetCanonicalizeUrl 的应用程序应跟踪特定 URL 上的此函数的使用。 如果 URL 中的不安全字符已转换为转义序列,则再次在 URL (上使用 InternetCanonicalizeUrl ,且没有标志) 会导致转义序列转换为另一个转义序列。 例如,URL 中的空白空间将转换为转义序列 %20。 在 URL 上再次调用 InternetCanonicalizeUrl 将导致转义序列 %20 转换为转义序列 %2520,因为 %符号是一个不安全的字符,用于转义序列,并由函数替换为转义序列 %25。

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

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

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