怎样实现像IE那样,仅把URL中的字符串转化成“%B2%E2%CA%D4”形式? 在网上找到的UrlEncode方法,都会把url中诸如“:”、“\”都转为成%x形式。 如果C++中没有这种代码,.net中是否会有? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/huangkelong/archive/2008/01/03/2023692.aspx %B2%E2%CA%D4之类的就是将内存流输出成16进制。 一看就知道应该是转化为BASE64的编码了,建议找BASE64算法 .net中就是HttpUtility.UrlEncode()相应还有UrlDecode() 应该不是base64吧,base64不会那么多%的 服务器端的话,那就看你用的什么语言了,要是在浏览器里直接用var url="http://aaa.com/测试.asp";url = encodeURI(url);//这里的url就转换好了 URL encode, 下面有一个例子:#ifdef _UNICODECString CUrlEncode::UrlEncode(CString sUrl){ if(sUrl.GetLength()<=0) return sUrl; CString sRet = sUrl.Left(MAX_ENCODE_LEN); try{ CString sOut; CString sIn = sRet; const int nLen = sIn.GetLength(); // do encoding const int cTemp = 4 * 3; char szTemp[cTemp]; for (int i = 0; i < nLen; i++){ TCHAR c = sIn.GetAt(i); if(iswascii (c) && iswalnum(c)){ sOut += c ; } else { if(_istspace(c)){ sOut += _T('+') ; } else { memset(szTemp,0, cTemp); toHex(c, szTemp, cTemp); sOut += szTemp; } } } sRet = sOut; } catch(...){ //return sRet; } return sRet;}#elseCString CUrlEncode::UrlEncode(CString sUrl){ if(sUrl.GetLength()<=0) return sUrl; static char cIn[MAX_ENCODE_LEN+1]; static char cOut[MAX_ENCODE_LEN+1]; CString sRet = sUrl.Left(MAX_ENCODE_LEN); try{ int nCount = sRet.GetLength(); memset(cIn,0,sizeof(cIn)); memset(cOut,0,sizeof(cOut)); CString sTemp = sRet; char* pIn = sTemp.GetBuffer(0); if(pIn!=NULL){ strcpy(cIn,pIn); DoUrlEncode(cIn,cOut,MAX_ENCODE_LEN); sRet = cOut; sRet.ReleaseBuffer(); } } catch(...){ return sUrl; } return sRet;}#endif base64 编码是 a-zA-Z+=/ 就这些字符 char* CUrlEncode::DoUrlEncode(const char *source, char *dest, size_t max) { static const char *hex = "0123456789abcdef"; size_t len = 0; unsigned char ch; char *ret = dest; *dest = 0; if(!source) return dest; char cIndex = 0; while(len < max - 4 && *source) { ch = (unsigned char)*source; if(*source == ' ') *(dest++) = '+'; else if(isalnum(*source)) *(dest++) = *source; else { *(dest++) = '%'; // char in C++ can be more than 8bit cIndex = (ch >> 4)&0xF; *(dest++) = hex[cIndex]; //cIndex = ch&0xF; cIndex = ch % 16; *(dest++) = hex[cIndex]; } ++source; } *dest = 0; return ret;} RemoveDirectoryW 再发毛遂自荐视频求职帖!大家帮忙顶一顶 CListCtrl 设置成report,如何给Column字段栏贴图? 图像 当中的箭头位置 与 目标区域是否重合的问题 关于上传速度与文件大小的问题 通过web查询的问题 VC++: Picture 控件的问题 哪位朋友能提供VC++6.0英文原版 我自己派生出来的控件类(CEdit)的实例为什么显示不出来? 和女朋友分手了,散分! TCP传输中缓冲区多大合适? WINVER
之类的就是将内存流输出成16进制。
相应还有UrlDecode()
var url="http://aaa.com/测试.asp";
url = encodeURI(url);
//这里的url就转换好了
{
if(sUrl.GetLength()<=0)
return sUrl;
CString sRet = sUrl.Left(MAX_ENCODE_LEN);
try{
CString sOut;
CString sIn = sRet;
const int nLen = sIn.GetLength();
// do encoding
const int cTemp = 4 * 3;
char szTemp[cTemp];
for (int i = 0; i < nLen; i++){
TCHAR c = sIn.GetAt(i);
if(iswascii (c) && iswalnum(c)){
sOut += c ;
} else {
if(_istspace(c)){
sOut += _T('+') ;
} else {
memset(szTemp,0, cTemp);
toHex(c, szTemp, cTemp);
sOut += szTemp;
}
} }
sRet = sOut;
} catch(...){
//return sRet;
}
return sRet;
}#elseCString CUrlEncode::UrlEncode(CString sUrl)
{
if(sUrl.GetLength()<=0)
return sUrl;
static char cIn[MAX_ENCODE_LEN+1];
static char cOut[MAX_ENCODE_LEN+1]; CString sRet = sUrl.Left(MAX_ENCODE_LEN);
try{
int nCount = sRet.GetLength();
memset(cIn,0,sizeof(cIn));
memset(cOut,0,sizeof(cOut));
CString sTemp = sRet;
char* pIn = sTemp.GetBuffer(0);
if(pIn!=NULL){
strcpy(cIn,pIn);
DoUrlEncode(cIn,cOut,MAX_ENCODE_LEN);
sRet = cOut;
sRet.ReleaseBuffer();
}
} catch(...){
return sUrl;
}
return sRet;
}#endif
base64 编码是 a-zA-Z+=/ 就这些字符
char* CUrlEncode::DoUrlEncode(const char *source, char *dest, size_t max)
{
static const char *hex = "0123456789abcdef";
size_t len = 0;
unsigned char ch;
char *ret = dest;
*dest = 0;
if(!source)
return dest;
char cIndex = 0;
while(len < max - 4 && *source)
{
ch = (unsigned char)*source;
if(*source == ' ')
*(dest++) = '+';
else if(isalnum(*source))
*(dest++) = *source;
else
{
*(dest++) = '%';
// char in C++ can be more than 8bit
cIndex = (ch >> 4)&0xF;
*(dest++) = hex[cIndex];
//cIndex = ch&0xF;
cIndex = ch % 16;
*(dest++) = hex[cIndex];
}
++source;
}
*dest = 0;
return ret;
}