Как удалить одинарные кавычки из строки в Swift? - PullRequest
3 голосов
/ 02 июля 2019

Я получаю значение из ответа API, как показано ниже

{
    "first_name" = "active EQ 'true'";
}

Мне нужно отправить это значение в качестве параметра запроса в другом API.Но при отправке запроса я вижу, что URL не кодируется.Я ожидаю, что active EQ 'true' должен быть URL, закодированный как active%20EQ%20%27true%27.

Я пытался addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) and it resulted in "active%20EQ%20\'true\'.Я вижу, что обратная косая черта добавляется как escape-символ, но не кодируется, как ожидалось.

let k = "active EQ 'true'"
let j = k.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
print("j is \(j)")

Я ожидал, что вывод будет active%20EQ%20%27true%27, но фактический вывод будет active%20EQ%20\'true\'

Ответы [ 3 ]

0 голосов
/ 02 июля 2019

Попробуйте, я проверил и все работает нормально.

let k = "active EQ 'true'"
let j = escape(k)
print("j is \(j)")

func escape(_ string: String) -> String {
        let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4
        let subDelimitersToEncode = "!$&'()*+,;="

        var allowedCharacterSet = CharacterSet.urlQueryAllowed
        allowedCharacterSet.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)")

        return string.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) ?? string
    }

Результат: j активен% 20EQ% 20% 27true% 27

0 голосов
/ 02 июля 2019

Спасибо за все предложения и EOD, я не хочу кодировать одинарные кавычки, так как API работает с этим, и значение API следует отправлять только с одинарными кавычками.Я просто пытался узнать о возможностях кодирования этого типа строк.

0 голосов
/ 02 июля 2019

Сначала пропустите "'" из вашей строки. Проверьте следующий код:

let k = "active EQ 'true' "
let i = k.replacingOccurrences(of: "'", with: "")
let j = i.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
print("j is \(j!)")
...