本文的目的是设计一个完成URL编码的C++类。在我曾经的项目中,我需要从 VC++ 6.0应用程序中POST数据,而这些数据需要进行URL编码。我在MSDN中查找 能根据提供的字符串生成URL编码的相关类或API,但我没有找到,因此我必须设 计一个自己的URLEncode C++类。
URLEncoder.exe是一个使用URLEncode类的MFC对话框程序。
如何处理
一些特殊字符在Internet上传送是件棘手的事情, 经URL编码特殊处理,可以 使所有字符安全地从Internet传送。
例如,回车的ASCII值是13,在发送FORM数据时候这就认为是一行数据的结束 。
通常,所有应用程序采用HTTP或HTTPS协议在客户端和服务器端传送数据。服 务器端从客户端接收数据有两种基本方法:
1、数据可以从HTTP头传送(COOKIES或作为FORM数据发送)
2、可以包含在URL中的查询部分
当数据包含在URL,它必须遵循URL语法进行编码。在WEB服务器端,数据自动 解码。考虑一下下面的URL,哪个数据是作为查询参数。
例如:http://WebSite/ResourceName?Data=Data
WebSite是URL名称
ResourceName可以是ASP或Servlet名称
Data是需要发送的数据。如果MIME类型是Content-Type: application/x- www-form-urlencoded,则要求进行编码。
RFC 1738
RFC 1738指明了统一资源定位(URLs)中的字符应该是US-ASCII字符集的子集 。这是受HTML的限制,另一方面,允许在文档中使用所有ISO-8859-1(ISO- Latin)字符集。这将意味着在HTML FORM里POST的数据(或作为查询字串的一部 分),所有HTML编码必须被编码。
ISO-8859-1 (ISO-Latin)字符集
在下表中,包含了完整的ISO-8859-1 (ISO-Latin)字符集,表格提供了每个 字符范围(10进制),描述,实际值,十六进制值,HTML结果。某个范围中的字 符是否安全。
Character range(decimal) | Type | Values | Safe/Unsafe |
0-31 | ASCII Control Characters | These characters are not printable | Unsafe |
32-47 | Reserved Characters | '' ''!?#$%&''()*+,-./ | Unsafe |
48-57 | ASCII Characters and Numbers | 0-9 | Safe |
58-64 | Reserved Characters | :;<=>?@ | Unsafe |
65-90 | ASCII Characters | A-Z | Safe |
91-96 | Reserved Characters | [\]^_` | Unsafe |
97-122 | ASCII Characters | a-z | Safe |
123-126 | Reserved Characters | {|}~ | Unsafe |
127 | Control Characters | '' '' | Unsafe |
128-255 | Non-ASCII Characters | '' '' | Unsafe |