[转]C++URL编码和解码

本文介绍了一种URL编码与解码的方法,并提供了相应的C++实现。通过该方法可以将包含特殊字符的字符串转化为适用于URL的形式,同时也能将已编码的URL还原为原始字符串。
以下是url中可能用到的特殊字符及在url中的经过编码后的值:
特殊字符的含义

URL编码

#include<iostream>    
using namespace std;

char dec2hexChar(short int n) {
if ( 0 <= n && n <= 9 ) {
return char( short('0') + n );
} else if ( 10 <= n && n <= 15 ) {
return char( short('A') + n - 10 );
} else {
return char(0);
}
}

short int hexChar2dec(char c) {
if ( '0'<=c && c<='9' ) {
return short(c-'0');
} else if ( 'a'<=c && c<='f' ) {
return ( short(c-'a') + 10 );
} else if ( 'A'<=c && c<='F' ) {
return ( short(c-'A') + 10 );
} else {
return -1;
}
}

CString escapeURL(const CString &URL)
{
CString result = "";
for ( unsigned int i=0; i<URL.GetLength(); i++ ) {
char c = URL[i];
if (
( '0'<=c && c<='9' ) ||
( 'a'<=c && c<='z' ) ||
( 'A'<=c && c<='Z' ) ||
c=='/' || c=='.'
) {
result += c;
} else {
int j = (short int)c;
if ( j < 0 ) {
j += 256;
}
int i1, i0;
i1 = j / 16;
i0 = j - i1*16;
result += '%';
result += dec2hexChar(i1);
result += dec2hexChar(i0);
}
}
return result;
}

CString deescapeURL(const CString &URL) {
CString result = "";
for ( unsigned int i=0; i < URL.GetLength(); i++ ) {
char c = URL[i];
if ( c != '%' ) {
result += c;
} else {
char c1 = URL[++i];
char c0 = URL[++i];
int num = 0;
num += hexChar2dec(c1) * 16 + hexChar2dec(c0);
result += char(num);
}
}
return result;
}


void CURlDlg::OnBnClickedOk()
{
CString str = "小草--";
CString temp = escapeURL(str);
AfxMessageBox(temp);


}




字符 汉字都会被转换
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值