//---------------------------------------------------------------------------
// 把/字符换成换行符,把^字符换成=号,把+号变为%A1 如果是汉字内码则转换为汉字
AnsiString TRequest::ParseParams(AnsiString tt)
{
int n;
//把汉字内码提取出来
/*
把等号后面&前的字串符串送入 StrToHz 函数进行过滤。如果是汉字内码则以汉字代替
*/
AnsiString ss(tt),aa(""),bb("");
int n1=0,n2=0;
//算法:对等号后的数据进行替换。把替换数据前的等号换为^符 ,直到把所有等号后面的数据
//替换完,把所有的=符换为^
while (1)
{
n1 = ss.Pos("=");
if ( n1 ==0 ) break;
ss.Delete(n1,1);
n2 = ss.Pos("&");
if ( n2!=0 )
{
aa = ss.SubString (n1,n2-n1);
aa = aa+ "%";
bb = StrToHz ( aa.c_str() );
bb = "^"+ bb;
bb = bb + "/"" ;
ss.Delete(n1,n2-n1+1);
ss.Insert (bb, n1 );
}
//内容的结尾无&符
else
{
aa = ss.SubString (n1,500);
aa = aa+ "%";
bb = StrToHz ( aa.c_str() );
bb = "^"+ bb ;
ss.Delete(n1,500);
ss.Insert ( bb, n1 );
}
}//while
tt = ss;
//把/字符换成换行符
while (1) {
n= tt.Pos("/"");
if ( n==0) break;
tt.Delete(n,1);
tt.Insert("/r/n",n);
}
tt += "/r/n";
//把^字符换成=号
for (int n=1; n<=tt.Length(); n++)
if (tt[n]=='^') tt[n]='=';
//把+字符换成
for (int n=1; n<=tt.Length(); n++)
if (tt[n]=='+') tt[n]=' ';
return tt;
}
/*
把 汉字的内码转换为汉字
输入:
汉字的内码字符串 format 1."%CC%C6%B2%AE%BB%A2iloveyou%" ASCII字符在内码中或最后
2."iloveyou%CC%C6%B2%AE%BB%A2%" ASCII字符在最前或无内码
输出:
汉字
*/
AnsiString TRequest::StrToHz(char* str)
{
//分离其他的字母或 数字 等符号
AnsiString aa,ss(str);
ss.Trim ();
AnsiString mm(""),nn("");
char * hz;
char tmp[3];
char hex[4];
int n1=0,n3=0,n4=0;
int len = strlen (str);
hz = new char[len];
ZeroMemory (hz,len );
int i=0;
//字符串符号是否在汉字前
n1 = ss.Pos ("%");
//格式2
if ( n1 !=1 )
{
strcpy (hz, ss.SubString(1,n1-1).c_str());
i = n1-1;
aa = ss.SubString ( n1 ,len-n1+1);
}
else
aa = str;
//格式1
while (1)
{
n3 = aa.Pos ("%");
if ( n3 ==0 ) break;
aa.Delete( n3,1);
n4 = aa.Pos ("%");
if ( n4 ==0 ) break;
mm = aa.SubString (n3,n4-n3);
int len2= mm.Length();
//汉字的2个内码加上其他字符
if ( len2 >2 )
{
//提取出前两个内码
strcpy (tmp, mm.SubString (1,2).c_str() );
nn.sprintf("0x%s",tmp);
hz [i]= nn.ToInt ();
i++;
//把后面的字符拷贝到数组中
memcpy (hz+i, mm.SubString(3,len2-2).c_str(),len2-2 );
i = i+len2-2;
}
//只有汉字的2个内码
else if ( len2==2 )
{
strcpy (tmp,mm.c_str() );
nn.sprintf("0x%s",tmp);
hz [i] = nn.ToInt ();
i++;
}
}
hz[ strlen(hz) ]= '/0';
ss = hz;
delete[] hz;
return ss;
}
// 把/字符换成换行符,把^字符换成=号,把+号变为%A1 如果是汉字内码则转换为汉字
AnsiString TRequest::ParseParams(AnsiString tt)
{
int n;
//把汉字内码提取出来
/*
把等号后面&前的字串符串送入 StrToHz 函数进行过滤。如果是汉字内码则以汉字代替
*/
AnsiString ss(tt),aa(""),bb("");
int n1=0,n2=0;
//算法:对等号后的数据进行替换。把替换数据前的等号换为^符 ,直到把所有等号后面的数据
//替换完,把所有的=符换为^
while (1)
{
n1 = ss.Pos("=");
if ( n1 ==0 ) break;
ss.Delete(n1,1);
n2 = ss.Pos("&");
if ( n2!=0 )
{
aa = ss.SubString (n1,n2-n1);
aa = aa+ "%";
bb = StrToHz ( aa.c_str() );
bb = "^"+ bb;
bb = bb + "/"" ;
ss.Delete(n1,n2-n1+1);
ss.Insert (bb, n1 );
}
//内容的结尾无&符
else
{
aa = ss.SubString (n1,500);
aa = aa+ "%";
bb = StrToHz ( aa.c_str() );
bb = "^"+ bb ;
ss.Delete(n1,500);
ss.Insert ( bb, n1 );
}
}//while
tt = ss;
//把/字符换成换行符
while (1) {
n= tt.Pos("/"");
if ( n==0) break;
tt.Delete(n,1);
tt.Insert("/r/n",n);
}
tt += "/r/n";
//把^字符换成=号
for (int n=1; n<=tt.Length(); n++)
if (tt[n]=='^') tt[n]='=';
//把+字符换成
for (int n=1; n<=tt.Length(); n++)
if (tt[n]=='+') tt[n]=' ';
return tt;
}
/*
把 汉字的内码转换为汉字
输入:
汉字的内码字符串 format 1."%CC%C6%B2%AE%BB%A2iloveyou%" ASCII字符在内码中或最后
2."iloveyou%CC%C6%B2%AE%BB%A2%" ASCII字符在最前或无内码
输出:
汉字
*/
AnsiString TRequest::StrToHz(char* str)
{
//分离其他的字母或 数字 等符号
AnsiString aa,ss(str);
ss.Trim ();
AnsiString mm(""),nn("");
char * hz;
char tmp[3];
char hex[4];
int n1=0,n3=0,n4=0;
int len = strlen (str);
hz = new char[len];
ZeroMemory (hz,len );
int i=0;
//字符串符号是否在汉字前
n1 = ss.Pos ("%");
//格式2
if ( n1 !=1 )
{
strcpy (hz, ss.SubString(1,n1-1).c_str());
i = n1-1;
aa = ss.SubString ( n1 ,len-n1+1);
}
else
aa = str;
//格式1
while (1)
{
n3 = aa.Pos ("%");
if ( n3 ==0 ) break;
aa.Delete( n3,1);
n4 = aa.Pos ("%");
if ( n4 ==0 ) break;
mm = aa.SubString (n3,n4-n3);
int len2= mm.Length();
//汉字的2个内码加上其他字符
if ( len2 >2 )
{
//提取出前两个内码
strcpy (tmp, mm.SubString (1,2).c_str() );
nn.sprintf("0x%s",tmp);
hz [i]= nn.ToInt ();
i++;
//把后面的字符拷贝到数组中
memcpy (hz+i, mm.SubString(3,len2-2).c_str(),len2-2 );
i = i+len2-2;
}
//只有汉字的2个内码
else if ( len2==2 )
{
strcpy (tmp,mm.c_str() );
nn.sprintf("0x%s",tmp);
hz [i] = nn.ToInt ();
i++;
}
}
hz[ strlen(hz) ]= '/0';
ss = hz;
delete[] hz;
return ss;
}