UrlEscapeA 関数 (shlwapi.h)
インターネット経由の転送中に変更される可能性がある URL の文字またはサロゲート ペア ("unsafe" 文字) を対応するエスケープ シーケンスに変換します。 サロゲート ペアは、U+10000 ~ U+10FFFF (UTF-32) または DC00 から DFFF (UTF-16) の間の文字です。
構文
LWSTDAPI UrlEscapeA(
[in] PCSTR pszUrl,
[out] PSTR pszEscaped,
[in, out] DWORD *pcchEscaped,
DWORD dwFlags
);
パラメーター
[in] pszUrl
型: PCTSTR
dwFlagsの値に応じて、完全または部分的な URL を含む最大長 INTERNET_MAX_URL_LENGTH の null で終わる文字列。
[out] pszEscaped
型: PTSTR
安全でない文字がエスケープ シーケンスに変換された、変換された文字列を受け取るバッファー。
[in, out] pcchEscaped
型: DWORD*
dWORD 値へのポインター。エントリには、pszEscaped バッファー内の文字数が含まれます。 urlEscape
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_ESCAPE_PERCENT と組み合わせて、その文字を変換に含めます。
このフラグを URL_ESCAPE_SPACES_ONLY または URL_DONT_ESCAPE_EXTRA_INFOと組み合わせることはできません。
URL_ESCAPE_AS_UTF8 (0x00040000)
Windows 7 以降のを
URL_ESCAPE_ASCII_URI_COMPONENT (0x00080000)
Windows 8 以降のを
戻り値
型: HRESULT
成功した場合はS_OKを返します。
備考
このドキュメントの目的上、一般的な 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 に対するさまざまなフラグの効果を示しています。 例の 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 ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして UrlEscape を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 2000 Professional、Windows XP [デスクトップ アプリのみ] |
サポートされる最小サーバー | Windows 2000 Server [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | shlwapi.h |
ライブラリ | Shlwapi.lib |
DLL | Shlwapi.dll (バージョン 5.0 以降) |