urlencode的规则其实很简单,搜索了半天,才找到原理,看了看其他人写的例子,csdn上有一个哥们用vc写了一个例子,感觉不过瘾,用c++重写了一个,个人感觉已经足够简单了,希望对初学者有用。
URLEncode是这样编码的
1。数字和字母不变。
2。空格变为"+"号。
3。其他被编码成"%"加上他们的ascii的十六进制,规律是这样的
比如“啊”字 Ascii的十六进制是B0A1——>%B0%A1(Note:它是每个字节前加个%)。
/**/
/*
URLEncode是这样编码的
1。数字和字母不变。
2。空格变为"+"号。
3。其他被编码成"%"加上他们的ascii的十六进制,规律是这样的
比如“啊”字 Ascii的十六进制是B0A1——>%B0%A1(Note:它是每个字节前加个%)。
*/
#include < iostream >
#include < string >
#include < fstream >
#include < ctype.h >
#include < stdlib.h >
using namespace std;
typedef unsigned char BYTE;
inline BYTE toHex( const BYTE & x)
... {
return x > 9 ? x + 55: x + 48;
}
string urlEncoding( string & sIn )
... {
cout << "size: " << sIn.size() << endl;
string sOut;
for( int ix = 0; ix < sIn.size(); ix++ )
...{
BYTE buf[4];
memset( buf, 0, 4 );
if( isalnum( (BYTE)sIn[ix] ) )
...{
buf[0] = sIn[ix];
}
else if ( isspace( (BYTE)sIn[ix] ) )
...{
buf[0] = '+';
}
else
...{
buf[0] = '%';
buf[1] = toHex( (BYTE)sIn[ix] >> 4 );
buf[2] = toHex( (BYTE)sIn[ix] % 16);
}
sOut += (char *)buf;
}
return sOut;
}
int main( int argc, char * argv[])
... {
string src;
ifstream inFile( "in.txt" );
if( !inFile )
...{
cout << "not in.txt to read" << endl;
system("PAUSE");
return -1;
}
inFile >> src;
string sOut = urlEncoding( src );
cout << sOut << endl;
system("PAUSE");
return 0;
}
URLEncode是这样编码的
1。数字和字母不变。
2。空格变为"+"号。
3。其他被编码成"%"加上他们的ascii的十六进制,规律是这样的
比如“啊”字 Ascii的十六进制是B0A1——>%B0%A1(Note:它是每个字节前加个%)。
*/
#include < iostream >
#include < string >
#include < fstream >
#include < ctype.h >
#include < stdlib.h >
using namespace std;
typedef unsigned char BYTE;
inline BYTE toHex( const BYTE & x)
... {
return x > 9 ? x + 55: x + 48;
}
string urlEncoding( string & sIn )
... {
cout << "size: " << sIn.size() << endl;
string sOut;
for( int ix = 0; ix < sIn.size(); ix++ )
...{
BYTE buf[4];
memset( buf, 0, 4 );
if( isalnum( (BYTE)sIn[ix] ) )
...{
buf[0] = sIn[ix];
}
else if ( isspace( (BYTE)sIn[ix] ) )
...{
buf[0] = '+';
}
else
...{
buf[0] = '%';
buf[1] = toHex( (BYTE)sIn[ix] >> 4 );
buf[2] = toHex( (BYTE)sIn[ix] % 16);
}
sOut += (char *)buf;
}
return sOut;
}
int main( int argc, char * argv[])
... {
string src;
ifstream inFile( "in.txt" );
if( !inFile )
...{
cout << "not in.txt to read" << endl;
system("PAUSE");
return -1;
}
inFile >> src;
string sOut = urlEncoding( src );
cout << sOut << endl;
system("PAUSE");
return 0;
}