我们知道,在IOS中,向URL地址发起连接的时候,必然涉及到NSURL对象(自己通过socket实现http协议的人不在此讨论范围)。
那么我们直接来看关于URLWithString这个方法的官方描述。我引用其中的Discussion如下:
This methodexpects URLString to contain any necessary percent escapecodes, which are ‘:’, ‘/’, ‘%’, ‘#’, ‘;’, and ‘@’. Note that ‘%’ escapes aretranslated via UTF-8.
这里对NSURL需要转义的特殊字符进行了描述,从这个描述我们可以得到一个信息就是字符的转义依据的是UTF-8编码。然后细看这些符号,肯定有人会想,我是在地址栏看到了不少转义字符,但是http://这里面的冒号、斜杠我怎么没见它转义过呢?
是的,您的疑惑是对的,因此我补充一点,转义字符主要是针对url请求带参数的情况,为了区别参数和url的保留字符,因此就必须将参数中的特殊字符进行转义,而用于表示协议的"http://"、表示路径的'/'、表示分隔参数的'&'等符号都是不需要转义的。
举个例子,假如我要在google中搜索"&=/@#符号"这个字符串,那么,拼接起来应该是"http://www.google.com.hk/search?hl=zh-CN&q=&=/@#符号",其中,红色部分需要转义,而蓝色部分不需要转义。你可以在Google的搜索框中输入这个字符串,然后搜索,会发现浏览器的地址栏中出现如下字样"q=%26%3D%2F%40%23%E7%AC%A6%E5%8F%B7",这就是转义后的结果。
好了,了解了这些,我就直接开始贴代码了,代码主要就是完成了一个NSString的Category,提供了两个方法。其中escapedURLString用于将URL参数转化为转义字符,originalURLString用于将有转义字符的url转化成可读的字符串。
URL中特殊字符和非西文字符转化为以%开始的转义字
最新推荐文章于 2024-07-20 17:56:58 发布