C++ URL 인코딩 (== 퍼센트 인코딩)

 소스 코드는 아래와 같습니다.
/**
 * 주어진 문자열을 URL 인코딩하여 반환함.
 *
 * 주요 코드 출처: http://codepad.org/lCypTglt
 *
 * @param s utf-8로 인코딩된 멀티바이트 문자열.
 *                (utf-8이 아니면 웹에서 제대로 인식하지 못할 수 있습니다.)
 *  @return URL 인코딩된 문자열
 */
std::string UrlEncode(const std::string &s)
{
    //RFC 3986 section 2.3 Unreserved Characters (January 2005)
    // 참고: http://ko.wikipedia.org/wiki/퍼센트_인코딩
    const std::string unreserved = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~";

    std::string escaped="";
    for(size_t i=0; i<s.length(); i++)
    {
        if (unreserved.find_first_of(s[i]) != std::string::npos)
        {
            escaped.push_back(s[i]);
        }
        else
        {
            escaped.append("%");
            char buf[3];

            /* char를 unsigned char로 바꿔주어야 합니다.
             * (그렇지 않으면 한글 등의 문자를 제대로 변환하지 못합니다.)
             */
            sprintf(buf, "%.2X", (unsigned char) s[i]);
            escaped.append(buf);
        }
    }
    return escaped;
}


참고 자료
  [1] 소스코드 참고: http://codepad.org/lCypTglt
  [2] 위 소스코드를 발견한 곳: http://www.zedwood.com/article/cpp-urlencode-function
  [3] 퍼센트 인코딩에 대한 정보: http://ko.wikipedia.org/wiki/퍼센트_인코딩

댓글

이 블로그의 인기 게시물

프로세스 강제 종료 불가 시.

Visual Studio 디버깅 시 멈춰있는 문제