Encode a URL with “#” 網址Encode特殊字元不轉換

(url, addingPercentEncoding, Reserved Special characters)

在網址中有些字元有特殊的符號,需要轉換可以參考下方網址

如果只透過addingPercentEncoding的urlQueryAllowed處理,
全部特殊符號都會被轉換,包含#(如下圖)

但如果url需要同時轉換特殊符號,又要保留有意義的特殊字元
可以參考本文

在轉換的條件,額外設定排外的特殊符號

var allowedCharacterSet = CharacterSet.urlQueryAllowed
allowedCharacterSet.insert("#")

guard let webURL = url?.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet as CharacterSet) else {
return url
}

加removingPercentEncoding避免重複encoding

var allowedCharacterSet = CharacterSet.urlQueryAllowed
allowedCharacterSet.insert("#")

guard let webURL = url?.removingPercentEncoding?.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet as CharacterSet) else {
return url
}

結果如下

番外篇

在轉換的條件,額外設定須轉換的特殊符號

var allowedCharacterSet = CharacterSet.urlQueryAllowed
allowedCharacterSet.remove("+")

guard let webURL = url?.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet as CharacterSet) else {
return url
}

加removingPercentEncoding避免重複encoding

var allowedCharacterSet = CharacterSet.urlQueryAllowed
allowedCharacterSet.remove("+")

guard let webURL = url?.removingPercentEncoding?.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet as CharacterSet) else {
return url
}

CharacterSet的url轉換很詭異….
該轉的沒轉,不該轉的也轉
強制轉大寫頭疼 = =

--

--