UrlEscapeW 関数 (shlwapi.h)

インターネット経由での転送中に変更される可能性がある URL 内の文字またはサロゲート ペア ("unsafe" 文字) を対応するエスケープ シーケンスに変換します。 サロゲート ペアは、U+10000 から U+10FFFF (UTF-32 の場合) または DC00 から DFFF (UTF-16 の場合) の間の文字です。

構文

LWSTDAPI UrlEscapeW(
  [in]      PCWSTR pszUrl,
  [out]     PWSTR  pszEscaped,
  [in, out] DWORD  *pcchEscaped,
            DWORD  dwFlags
);

パラメーター

[in] pszUrl

種類: PCTSTR

dwFlags の値に応じて、完全または部分的な URL を含む最大長INTERNET_MAX_URL_LENGTHの null で終わる文字列。

[out] pszEscaped

種類: PTSTR

アンセーフ文字がエスケープ シーケンスに変換された、変換された文字列を受け取るバッファー。

[in, out] pcchEscaped

型: DWORD*

入力時に pszEscaped バッファー内の文字数を含む DWORD 値へのポインター。 UrlEscape を呼び出す前に、呼び出し元のアプリケーションは、pcchEscaped によって参照される値をバッファーのサイズに設定する必要があります。 この関数が正常に戻ると、値はバッファーに書き込まれた文字数を受け取りますが、終端の NULL 文字は含まれません。

E_POINTERエラー コードが返された場合、バッファーは小さすぎて結果を保持できません。 また、pcchEscaped によって参照される値はバッファー内の必要な文字数に設定されます。 他のエラーが返された場合、 pcchEscaped によって参照される値は未定義です。

dwFlags

型: DWORD

pszURL で指定されている URL の部分と、その文字列内のどの文字をエスケープ シーケンスに変換するかを示すフラグ。 次のフラグが定義されています。

URL_DONT_ESCAPE_EXTRA_INFO (0x02000000)

URL_ESCAPE_SPACES_ONLY と組 み合わせて使用すると、クエリ内の文字 (文字列内で最初の # または ? 文字の後に続く URL の部分) が変換されないようにします。 このフラグは単独で使用したり、 URL_ESCAPE_SEGMENT_ONLYと組み合わせたりしないでください。

URL_BROWSER_MODE

URL_DONT_ESCAPE_EXTRA_INFOと同じに定義されます。

URL_ESCAPE_SPACES_ONLY (0x04000000)

URL のクエリ部分のスペース文字を含め、スペース文字のみをエスケープ シーケンスに変換します。 その他の安全でない文字は、エスケープ シーケンスに変換されません。 このフラグは、 pszURL に完全な URL が含まれていないことを前提としています。 サーバー仕様に従う部分のみが必要です。

このフラグを URL_DONT_ESCAPE_EXTRA_INFO と組み合わせて、URL のクエリ部分の空白文字が変換されないようにします。

このフラグを URL_ESCAPE_PERCENT または URL_ESCAPE_SEGMENT_ONLYと組み合わせることはできません。

URL_ESCAPE_PERCENT (0x00001000)

URL のセグメント セクションで見つかった %文字 (サーバー仕様と最初の # または ? 文字の間にあるセクション) を変換します。 既定では、% 文字はエスケープ シーケンスに変換されません。 セグメント内の他の安全でない文字も正常に変換されます。

このフラグを URL_ESCAPE_SEGMENT_ONLY と組み合わせると、URL のクエリ部分にこれらの % 文字が含まれます。 ただし、 URL_ESCAPE_SEGMENT_ONLY フラグを指定すると、文字列全体がセグメント (任意の # または ? ) と見なされます。 文字も変換されます。

このフラグを URL_ESCAPE_SPACES_ONLYと組み合わせることはできません。

URL_ESCAPE_SEGMENT_ONLY (0x00002000)

pszURL に、サーバー コンポーネントの後のクエリの前にある URL のそのセクションのみが含まれていることを示します。 文字列内の安全でない文字はすべて変換されます。 このフラグを設定するときに完全な URL が指定されている場合、文字列全体の安全でない文字はすべて変換されます (# や ? の文字など)。

このフラグを URL_ESCAPE_PERCENT と組み合わせて、その文字を変換に含めます。

このフラグを URL_ESCAPE_SPACES_ONLY または URL_DONT_ESCAPE_EXTRA_INFOと組み合わせることはできません。

URL_ESCAPE_AS_UTF8 (0x00040000)

Windows 7 以降。 すべての非 ASCII 文字を UTF-8 に相当するものとしてパーセントエンコードします。

URL_ESCAPE_ASCII_URI_COMPONENT (0x00080000)

Windows 8 以降。 URI RFC 3986 (a-zA-Z0-9-.~_) から予約されていないセットの外部にあるすべての ASCII 文字をパーセントエンコードします。

戻り値

型: HRESULT

成功した場合はS_OKを返します。 pcchEscaped バッファーが小さすぎて結果を格納できなかった場合は、E_POINTERが返され、pcchEscaped が指す値が必要なバッファー サイズに設定されます。 それ以外の場合は、標準エラー値が返されます。

注釈

このドキュメントの目的上、一般的な URL は、サーバー、セグメント、クエリの 3 つのセクションに分かれています。 例:

http://microsoft.com/test.asp?url=/example/abc.asp?frame=true#fragment

サーバー部分は "http://microsoft.com/". 末尾のスラッシュは、サーバー部分の一部と見なされます。

セグメント部分は、サーバー部分の後にあるパスの任意の部分ですが、最初の # または ? の前にあります。 文字、この場合は単に "test.asp" です。

クエリ部分は、最初の # または ? からのパスの残りの部分です。 文字 (両端を含む)。 この例では、"?url=/example/abc.asp?frame=true#fragment" です。

安全でない文字は、インターネット経由で転送中に変更される可能性のある文字です。 この関数は、アンセーフ文字を同等の "%xy" エスケープ シーケンスに変換します。 次の表は、安全でない文字とそのエスケープ シーケンスを示しています。

文字 エスケープ シーケンス
^ %5E
& %26
` %60
{ %7B
} %7D
| %7C
] %5D
[ %5B
" %22
< %3C
> %3E
\ %5C
 

URL_ESCAPE_SEGMENT_ONLY フラグを使用すると、 # (%23) の変換も発生します。 (%3F)、および / (%2F) 文字。

既定では、 UrlEscape は# または ? の後のテキストを無視します。 文字。 URL_ESCAPE_SEGMENT_ONLY フラグは、文字列全体をセグメントとして指定することで、この動作をオーバーライドします。 URL_ESCAPE_SPACES_ONLY フラグは、この動作をオーバーライドしますが、スペース文字の場合のみオーバーライドします。

次の例は、URL に対するさまざまなフラグの効果を示しています。 URL の例は無効ですが、デモ目的で誇張されています。


// The full original URL
http://microsoft.com/test/t%e<s t.asp?url=/{ex% ample</abc.asp?frame=true#fr%agment    

// URL_ESCAPE_SPACES_ONLY 
// Only space characters are escaped. Other unsafe characters are ignored.
// Note: This flag expects the server portion of the URL to be omitted.
Original = test/t%e<s t.asp?url=/{ex% ample</abc.asp?frame=true#fr%agment
Result   = test/t%e<s%20t.asp?url=/{ex%%20ample</abc.asp?frame=true#fr%agment

// URL_ESCAPE_SPACES_ONLY | URL_DONT_ESCAPE_EXTRA_INFO
// Spaces in the segment are converted into their escape sequences, but
// spaces in the query are not.
Original = test/t%e<s t.asp?url=/{ex% ample</abc.asp?frame=true#fr%agment
Result   = test/t%e<s%20t.asp?url=/{ex% ample</abc.asp?frame=true#fr%agment

// URL_ESCAPE_PERCENT
// Here only the segment and query are supplied and the server component is
// omitted, although that is not required. Only the segment is considered.
// All unsafe characters plus the % character are converted in the segment.
Original = test/t%e<s t.asp?url=/{ex% ample</abc.asp?frame=true#fr%agment
Result   = test/t%25e%3Cs%20t.asp?url=/{ex% ample</abc.asp?frame=true#fr%agment

// URL_ESCAPE_SEGMENT_ONLY
// Note: This flag expects only the segment, omitting the server and query 
//       components.
// The / character is escaped as well as the usual unsafe characters.
Original = test/t%e<s t.asp
Result   = test%2Ft%e%3Cs%20t.asp

注意

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

要件

要件
サポートされている最小のクライアント Windows 2000 Professional、Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー shlwapi.h
Library Shlwapi.lib
[DLL] Shlwapi.dll (バージョン 5.0 以降)

こちらもご覧ください

Uniform Resource Locator の処理