linux c++ urlencode 头文件,C++ URLencode library

//If I read the quest correctly and you want to do this yourself, without using curl I think I have a solution (sssuming UTF-) and I think this is a conformant and portable way of URL encoding query strings:

#include

#include

#include

#include

#include

#include

#include

namespace {

std::string encimpl(std::string::value_type v) {

if (isalnum(v))

return std::string()+v;

std::ostringstream enc;

enc << '%' << std::setw() << std::setfill('') << std::hex << std::uppercase << int(static_cast(v));

return enc.str();

}

}

std::string urlencode(const std::string& url) {

// Find the start of the query string

const std::string::const_iterator start = std::find(url.begin(), url.end(), '?');

// If there isn't one there's nothing to do!

if (start == url.end())

return url;

// store the modified query string

std::string qstr;

std::transform(start+, url.end(),

// Append the transform result to qstr

boost::make_function_output_iterator(boost::bind(static_cast<:string std::string>(&std::string::append),&qstr,_1)),

encimpl);

return std::string(url.begin(), start+) + qstr;

}

It has no non-standard dependencies other than boost and if you don't like the boost dependency it's not that hard to remove.

I tested it using:

int main() {

const char *testurls[] = {"http://foo.com/bar?abc<>de??90 210fg!\"$%",

"http://google.com",

"http://www.unicode.com/example?großpösna"};

std::copy(testurls, &testurls[sizeof(testurls)/sizeof(*testurls)],

std::ostream_iterator<:string>(std::cout,"\n"));

std::cout << "encode as: " << std::endl;

std::transform(testurls, &testurls[sizeof(testurls)/sizeof(*testurls)],

std::ostream_iterator<:string>(std::cout,"\n"),

std::ptr_fun(urlencode));

}

Which all seemed to work:

http://foo.com/bar?abc<>de??90 210fg!"$%

http://google.com

http://www.unicode.com/example?großpösna

Becomes:

http://foo.com/bar?abc%3C%3Ede%3F%3F90%20%20%20210fg%21%22%24%25

http://google.com

http://www.unicode.com/example?gro%C3%9Fp%C3%B6sna

Which squares with these examples

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值