Чтобы кодировать параметр в URL-адресе, я нахожу, что с помощью символа .alphanumerics
задан самый простой вариант:
let encoded = parameter.addingPercentEncoding(withAllowedCharacters: .alphanumerics)
let url = "http://www.example.com/?name=\(encoded!)"
Использование любого из стандартных наборов символов для кодирования URL-адресов (например, URLQueryAllowedCharacterSet
или URLHostAllowedCharacterSet
) не будут работать, потому что они не исключают символы =
или &
.
Обратите внимание, что с помощью .alphanumerics
он кодирует некоторые символы, которые делают не нужно кодировать (например, .
, -
или _
). Я нахожу использование .alphanumerics
проще, чем создание пользовательского набора символов, и не против некоторых дополнительных символов, которые нужно закодировать. Если это вас беспокоит, создайте пользовательский набор символов, как описано в . Как процитировать кодировку URL String , например, например:
var allowed = CharacterSet.alphanumerics
allowed.insert(charactersIn: ".-_")
let encoded = parameter.addingPercentEncoding(withAllowedCharacters: allowed)
let url = "http://www.example.com/?name=\(encoded!)"
Внимание: параметр encoded
это сила, развернутая. Для недопустимой строки юникода может произойти сбой. См. . Почему возвращаемое значение String.addingPercentEncoding () необязательно? . Вместо развертывания силы encoded!
вы можете использовать encoded ?? ""
или использовать if let encoded = ...
.