博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ URLencode library
阅读量:6423 次
发布时间:2019-06-23

本文共 2434 字,大约阅读时间需要 8 分钟。

I need a library that can URLencode a string/char array.

Now, I can hex encode an ASCII array like here:

But I need something that works with Unicode. Note: On Linux AND on Windows !

CURL has a quite nice:

char *encodedURL = curl_easy_escape(handle,WEBPAGE_URL, strlen(WEBPAGE_URL));

but first, that needs CURL and it also is not unicode capable, as one sees by strlen

2 Answers

//If I read the quest correctly and you want to do this yourself, without using curl I think I have a solution (sssuming UTF-8) 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(2) << std::setfill('0') << 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+1, url.end(), // Append the transform result to qstr boost::make_function_output_iterator(boost::bind(static_cast
(&std::string::append),&qstr,_1)), encimpl); return std::string(url.begin(), start+1) + 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
(std::cout,"\n")); std::cout << "encode as: " << std::endl; std::transform(testurls, &testurls[sizeof(testurls)/sizeof(*testurls)], std::ostream_iterator
(std::cout,"\n"), std::ptr_fun(urlencode));}Which all seemed to work:http://foo.com/bar?abc<>de??90 210fg!"$%http://google.comhttp://www.unicode.com/example?großpösnaBecomes:http://foo.com/bar?abc%3C%3Ede%3F%3F90%20%20%20210fg%21%22%24%25http://google.comhttp://www.unicode.com/example?gro%C3%9Fp%C3%B6snaWhich squares with these examples

 

转载地址:http://asrra.baihongyu.com/

你可能感兴趣的文章
使用 <Iframe>实现跨域通信
查看>>
闭包--循序学习
查看>>
项目实战之集成邮件开发
查看>>
解决C3P0在Linux下Failed to get local InetAddress for VMID问题
查看>>
1531 山峰 【栈的应用】
查看>>
巧用美女照做微信吸粉,你会做吗?
查看>>
wcf学习总结《上》
查看>>
ERROR (ClientException)
查看>>
Load Balance 产品横向比较
查看>>
Java代理程序实现web方式管理邮件组成员
查看>>
【编译打包】tengine 1.5.1 SRPM
查看>>
看图说话:手动清除病毒文件流程
查看>>
一句话下拖库
查看>>
Deploy Office Communications Server 2007R2 Group Chat Server(二)
查看>>
在Cacti上实现MSN报警机制
查看>>
如何对C++虚基类构造函数
查看>>
XFire WebService开发快速起步
查看>>
JavaScript 函数replace揭秘
查看>>
QTP解决内嵌IE窗体方法2
查看>>
“王子”的演讲:N828印象
查看>>