다음을 통해 공유


UrlEscapeA 함수(shlwapi.h)

인터넷("안전하지 않은" 문자)을 전송하는 동안 변경될 수 있는 URL의 문자 또는 서로게이트 쌍을 해당 이스케이프 시퀀스로 변환합니다. 서로게이트 쌍은 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*

항목에서 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의 쿼리 부분에서 공백 문자가 변환되지 않도록 이 플래그를 URL_DONT_ESCAPE_EXTRA_INFO 결합합니다.

이 플래그는 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은 서버, 세그먼트 및 쿼리의 세 섹션으로 나뉩니다. 예를 들면 다음과 같습니다.

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 헤더는 UNICODE 전처리기 상수의 정의에 따라 이 함수의 ANSI 또는 유니코드 버전을 자동으로 선택하는 별칭으로 UrlEscape를 정의합니다. 인코딩 중립 별칭을 인코딩 중립이 아닌 코드와 혼합하면 컴파일 또는 런타임 오류가 발생하는 불일치가 발생할 수 있습니다. 자세한 내용은 함수 프로토타입에 대한 규칙을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional, Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 shlwapi.h
라이브러리 Shlwapi.lib
DLL Shlwapi.dll(버전 5.0 이상)

추가 정보

균일한 리소스 로케이터 처리