共用方式為


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 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 中的不安全字元已轉換成逸出序列,請在 URL 上再次使用 InternetCanonicalizeUrl,導致逸出序列轉換成另一個逸出序列。 例如,URL 中的空白空間會轉換成逸出序列 %20。 在 URL 上再次呼叫 InternetCanonicalizeUrl 會導致逸出序列 %20 轉換成逸出序列 %2520,因為 % 符號是保留給逸出序列的不安全字元,而且會由函式取代為逸出序列 %25。

如同 WinINet API 的其他所有層面,無法從 DllMain 或全域物件的建構函式和解構函式安全地呼叫此函式。

注意 WinINet 不支援伺服器實作。 此外,不應該從服務使用。 針對伺服器實作或服務,請使用 Microsoft Windows HTTP 服務 (WinHTTP)
 

注意

wininet.h 標頭會根據 UNICODE 預處理器常數的定義,將 InternetCanonicalizeUrl 定義為自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
標頭 wininet.h
連結庫 Wininet.lib
DLL Wininet.dll

另請參閱

處理統一資源定位器

WinINet 函式