本文不僅針對URL結構進行了分析蔼水,而且對于對于url的一些編碼的注意事項也給出了解決方法寝优;
在url規(guī)范中:":/?#[]@!¥&’()*+,;="等符號都是有特殊含義的汰聋,如果我們在進行get請求時袖订,請求的參數(shù)中包含了這些特殊字符就會引起沖突,解決方法就是講這些特殊的字符轉換為“%+ASCII”形式昆庇,iOS中的CFURLCreateStringByAddingPercentEscapes函數(shù)就可以處理這個問題
參考連接:URL 編碼:CFURLCreateStringByAddingPercentEscapes
擴展連接:
對于iOS網(wǎng)絡請求相關的了解可以參考下面相關連接:
IOS項目開發(fā)之網(wǎng)絡編程 - 隨筆分類 - 人魔七七 - 博客園
######2017年12月更
對于url的encode,iOS提供了兩個API:
API1:-(nullableNSString*)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encde(iOS9已廢棄)
API2:-(nullableNSString*)stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet*)allowedCharacters
API1中會對url中除了保留字外的其他字符都進行%+ASICC編碼歇万,比如
https://www.xingshulin@xixing.com#mark?p1=hello world&p2=我是參數(shù)2&p3=query3
上面用API1編碼后輸出:https://www.xingshulin@xixing.com%23mark?p1=hello%20world&p2=%E6%88%91%E6%98%AF%E5%8F%82%E6%95%B02&p3=query3
用API2,如果使用URLQueryAllowedCharacterSet進行編碼是一樣的揩晴,但如果使用URLHostAllowedCharacterSet編碼會輸出:
https%3A%2F%2Fwww.xingshulin%40xixing.com%23mark%3Fp1=hello%20world&p2=%E6%88%91%E6%98%AF%E5%8F%82%E6%95%B02&p3=query3
可見,API2比API1的功能更強大贪磺。API2針對除了www.xingshulin之外的其他特俗字符都進行了編碼硫兰。
如果有時候我們不需要對某些特殊字符進行編碼,比如上面的#mark缘挽,mark前的“#”,那么用API2也可以實現(xiàn)瞄崇,通過customAllowedSet =? NSCharacterSet(charactersInString:"`%^{}\"[]|\\<> ").invertedSet,自定義characterSet可以實現(xiàn)壕曼。上面就保證了,會保留"`%^{}\"[]|\\<> "之外的特俗字符“#”等浊,輸出如下:www.xingshulin@xixing.com#mark?p1=hello%20world&p2=%E6%88%91%E6%98%AF%E5%8F%82%E6%95%B02&p3=query3