Url传递中的特殊符号的编码以及中文编码

当网页上的表单(form)通过get方式提交数据到Web服务器时,‘?’, ‘&’, ‘=’, ‘%’, ‘+’ 等符号在提交的数据中都有特殊的定义和用途。因此,如果所要提交的某个表单项中,包含这些符号,那么这些符号就需要进行一下转化,然后服务器再进行逆向转化而得到本来所要提交的数据。

转化的格式是:%XX (百分号再跟上被转化符号的16进制编码)。比如:‘?’ 会被转化成 ‘%3F’,空格 ’ ’ 会被转化成 ‘+’ 或者 ‘%20’。

如果所要提交的表单数据中,包含有汉字,那么浏览器会将会将每个汉字根据当前页面所使用的的编码转化成字节,然后将每个字节采用“%XX”的格式提交到服务器。服务器端遇到“%XX”格式的数据时,会根据“XX”编号得到字节,然后再根据同样的编码得到字符串。

下表中列出了一些URL特殊符号及编码

    • URL 中+号表示空格 %2B
  1. 空格 URL中的空格可以用+号或者编码 %20

  2. / 分隔目录和子目录 %2F

  3. ? 分隔实际的 URL 和参数 %3F

  4. % 指定特殊字符 %25

  5. 表示书签 %23

  6. & URL 中指定的参数间的分隔符 %26

  7. = URL 中指定参数的值 %3D

特别注意的是当出现中文的时候必须先将其转化为UTF-8码,然后将UTF-8码改写为%XX的形式

例如“中”转化后的UTF-8码为FFFFFFE4、FFFFFFB8、FFFFFFAD,之后我们要改写为%E4%B8%AD

//将你输入的字符串转化为URL支持的码CString CheckCString(char* input) { int len = strlen(input); CString output=""; for (int i=0; i<len; i++) { if (input[i]<0)//中文 { char inTemp[3]={0}; inTemp[0] = input[i]; inTemp[1] = input[i+1]; inTemp[2] = '/0'; CString o = GBToUTF8(inTemp);//GB码转化为UTF8码 CString name; for (int j=0; j<3; j++) { CString a; a.Format("%X",o[j]); a.Replace("FFFFFF",""); name+="%"; name+=a; } ++i; output+=name; } else//其他的 { output+="%"; char b[2]={0}; sprintf(b,"%X",input[i]); output+=b; } } return output;//返回值 }