次の方法で共有


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 バッファーのサイズ (文字数) を含む変数へのポインター。 関数が成功した場合、このパラメーターは、終端の null 文字を含まない lpszBuffer バッファーに実際にコピーされた文字数を受け取ります。 関数が失敗した場合、このパラメーターはバッファーの必要なサイズ (終端の null 文字を含む文字) を受け取ります。

[in] dwFlags

正規化を制御します。 フラグが指定されていない場合、関数はすべての安全でない文字とメタ シーケンス (.,\ ..、... など) をエスケープ シーケンスに変換します。 このパラメーターには、次のいずれかの値を指定できます。

価値 意味
ICU_BROWSER_MODE
"#" または "?"" の後の文字はエンコードまたはデコードされず、"?"" の後の末尾の空白は削除されません。 この値を指定しない場合、URL 全体がエンコードされ、末尾の空白が削除されます。
ICU_DECODE
URL が解析される前に、すべての %XX シーケンスをエスケープ シーケンスを含む文字に変換します。
ICU_ENCODE_PERCENT
発生したパーセント記号をエンコードします。 既定では、パーセント記号はエンコードされません。 この値は、Microsoft Internet Explorer 5 以降で使用できます。
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_DECODE フラグが ICU_NO_ENCODEなしで使用されている場合、URL は解析される前にデコードされます。アンセーフ文字は、解析後に再エンコードされます。 この関数は任意のプロトコル スキームを処理しますが、これを行うには、安全でない文字セットから推論を行う必要があります。

Internet Explorer 3.0 を使用する場合 (または Internet Explorer 5 以降の ICU_ENCODE_PERCENT フラグを設定する場合) InternetCanonicalizeUrl を呼び出すアプリケーションは、特定の URL でこの関数の使用状況を追跡する必要があります。 URL 内の安全でない文字がエスケープ シーケンスに変換されている場合、InternetCanonicalizeUrl を URL に再度使用すると (フラグなし)、エスケープ シーケンスが別のエスケープ シーケンスに変換されます。 たとえば、URL 内の空白は、%20エスケープ シーケンスに変換されます。 InternetCanonicalizeUrl を URL で再度呼び出すと、エスケープ シーケンス %20 がエスケープ シーケンス %2520に変換されます。これは、% 記号はエスケープ シーケンス用に予約され、関数に置き換えられる安全でない文字であり、エスケープ シーケンス %25に置き換えられるためです。

WinINet API の他のすべての側面と同様に、この関数は DllMain またはグローバル オブジェクトのコンストラクターとデストラクターから安全に呼び出すことはできません。

注意 WinINet では、サーバーの実装はサポートされていません。 また、サービスから使用しないでください。 サーバーの実装またはサービスの場合は、Microsoft Windows HTTP Services (WinHTTP)を使用します。
 

手記

wininet.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして InternetCanonicalizeUrl を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー wininet.h
ライブラリ Wininet.lib
DLL Wininet.dll

関連項目

の一様なリソース ロケーターの処理

WinINet Functions の