iOS swift urlencode

swift 升級到5,更新了三方庫,支持的系統(tǒng)也從ios 8 升到了 ios 10 陪拘。
發(fā)現(xiàn)有很多方法過期了。
1.編碼

func urlencode(_ string: String) -> String {
        let mstring = string.replacingOccurrences(of: " ", with: "+")
        let legalURLCharactersToBeEscaped: CFString = "!*'\"();:@&=+$,/?%#[]% " as CFString
        return CFURLCreateStringByAddingPercentEscapes(nil, mstring as CFString?, nil, legalURLCharactersToBeEscaped, CFStringBuiltInEncodings.UTF8.rawValue) as String
}

告警如下:
'CFURLCreateStringByAddingPercentEscapes' was deprecated in iOS 9.0: Use [NSString stringByAddingPercentEncodingWithAllowedCharacters:] instead, which always uses the recommended UTF-8 encoding, and which encodes for a specific URL component or subcomponent (since each URL component or subcomponent has different rules for what characters are valid).

修改方法:

func urlencode(_ string: String) -> String {
    let mstring = string.replacingOccurrences(of: " ", with: "+")
    let set = CharacterSet(charactersIn: "!*'\"();:@&=+$,/?%#[]% ")
    return mstring.addingPercentEncoding(withAllowedCharacters: set) ?? ""
}

charactersIn的內容和服務器溝通好纤壁,但在網(wǎng)上也找到了通用的封裝

extension String {
     
    //將原始的url編碼為合法的url
    func urlEncoded() -> String {
        let encodeUrlString = self.addingPercentEncoding(withAllowedCharacters:
            .urlQueryAllowed)
        return encodeUrlString ?? ""
    }
     
    //將編碼后的url轉換回原始的url
    func urlDecoded() -> String {
        return self.removingPercentEncoding ?? ""
    }
}

app內一頓測試左刽,發(fā)現(xiàn)以上修改方法不行,很多特殊符號沒有編譯酌媒。
最終找到了目前經過很多特殊字符測試都通過的90%完美寫法欠痴。

func urlencode(_ string: String) -> String {
    var allowedQueryParamAndKey = NSCharacterSet.urlQueryAllowed
    allowedQueryParamAndKey.remove(charactersIn: "!*'\"();:@&=+$,/?%#[]% ")
    return string.addingPercentEncoding(withAllowedCharacters: allowedQueryParamAndKey) ?? string
}

如果按你的理解認為這個上面代碼是胡扯八道,其實你不防嘗試一下馍佑。

最開始我搜索信息看到相關的代碼的時候斋否,我直接pass他,都是要加一些未被收錄的字符拭荤,在這里刪除那肯定是錯誤的茵臭,沒想到讓一個不會swift的安卓開發(fā)同事讓嘗試一下,為了讓他死心舅世,我一嘗試旦委,結果竟然是正確的奇徒,我目前也給不了一個合理的解析,這段代碼就是能解決這個問題缨硝。

我們對應的后臺用的是go技術摩钙,對應的解碼是url.go中如下方法:

// QueryUnescape does the inverse transformation of QueryEscape,
// converting each 3-byte encoded substring of the form "%AB" into the
// hex-decoded byte 0xAB.
// It returns an error if any % is not followed by two hexadecimal
// digits.
func QueryUnescape(s string) (string, error) {
    return unescape(s, encodeQueryComponent)
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市查辩,隨后出現(xiàn)的幾起案子胖笛,更是在濱河造成了極大的恐慌,老刑警劉巖宜岛,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件长踊,死亡現(xiàn)場離奇詭異,居然都是意外死亡萍倡,警方通過查閱死者的電腦和手機身弊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來列敲,“玉大人阱佛,你說我怎么就攤上這事〈鞫” “怎么了凑术?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長所意。 經常有香客問我麦萤,道長,這世上最難降的妖魔是什么扁眯? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任壮莹,我火速辦了婚禮,結果婚禮上姻檀,老公的妹妹穿的比我還像新娘命满。我一直安慰自己,他們只是感情好绣版,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布胶台。 她就那樣靜靜地躺著,像睡著了一般杂抽。 火紅的嫁衣襯著肌膚如雪诈唬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天缩麸,我揣著相機與錄音铸磅,去河邊找鬼。 笑死,一個胖子當著我的面吹牛阅仔,可吹牛的內容都是我干的吹散。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼八酒,長吁一口氣:“原來是場噩夢啊……” “哼空民!你這毒婦竟也來了?” 一聲冷哼從身側響起羞迷,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤界轩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衔瓮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耸棒,經...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年报辱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片单山。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡碍现,死狀恐怖,靈堂內的尸體忽然破棺而出米奸,到底是詐尸還是另有隱情昼接,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布悴晰,位于F島的核電站慢睡,受9級特大地震影響,放射性物質發(fā)生泄漏铡溪。R本人自食惡果不足惜漂辐,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棕硫。 院中可真熱鬧髓涯,春花似錦、人聲如沸哈扮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滑肉。三九已至包各,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間靶庙,已是汗流浹背问畅。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人按声。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓膳犹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親签则。 傳聞我的和親對象是個殘疾皇子须床,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容

  • 在iOS 9.0之后,以前常用的NSString編碼的方法stringByAddingPercentEscapes...
    Ro_bber閱讀 16,750評論 3 24
  • 原文地址:swift4.0 適配 一渐裂、前言 在我們的工程中處于swift和OC混編的狀態(tài)豺旬,使用swift已經有一年...
    默默_David閱讀 1,924評論 0 3
  • 有的時候咱們會碰見字符串里有一些特殊字符在轉成URL的時候 會出現(xiàn)轉換不了的情況,這個時候需要對字符串進行編碼9....
    HOULI閱讀 230評論 0 0
  • URLEncode iOS 開發(fā)中請求訪問 Http(s) 時柒凉,必須對 URL 進行轉碼 (Encode)族阅,如果是...
    BlessNeo閱讀 1,545評論 0 0
  • @interfaceNSString (NSURLUtilities) // Returns a new stri...
    流沙3333閱讀 562評論 0 0