我们平常访问网页的时候,都是在访问一个个的网页URL,但是我们可能没有关注过这些URL,其实这里面还是有很大学问的。
正常情况下,URL只能使用英文字母、数字和某些标点符号,其他的字符是不允许出现在 URL里面的。比如,最常见的 URL就是百度的网址:“http://www.baidu.com”,但是没有希腊字母的网址“http://www.aβγ.com"。这是因为网络标准RFC 1738做了硬性规定:
“…Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*’(),” [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”
“只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*’(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于URL。”
平常我们在 URL中传递一些参数时,大概率会有一些特殊字符或者中文参数或URL地址,一般浏览器就会对这些特殊的字符进行处理,否则在服务器后台处理的时候就会出现错误。这些特殊符号在URL中是不能直接传递的,只能传递经过编码后的字符,在服务器后台在进行解码处理。
编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如空格的编码值是"%20"。下表中列出了一些URL特殊符号及编码。
下面是C++的URL编码实现以及在 Linux下的输出结果: