Декодирование Swift URL не декодирует строку - PullRequest
0 голосов
/ 09 марта 2020

при попытке декодировать следующую закодированную строку не работает ... фактически ничего не делает ... оставляя строку такой, какая она есть:

https://www.foodhat.app/?rOpeningTime=08:00&rClosingTime=20:00&rClosedUntil=2019-08-19&pId=557&rId=69&goTo=CUSTOMER_PRODUCT_DETAILS&cName=Duhok&pName=%D9%85%D9%86%D8%B3%D9%81+%D8%AF%D9%88%D9%84%D9%85%D8%A9&rName=Mansaf+Alzain&rMinOrderValue=15000

pName is arabi c, поэтому не удивляйтесь его кодировке.

Я использую str.removingPercentEncoding для декодирования строки ... но, как сказано ... он не удаляет "+" (например, в rName)!

Результат

let str = "https://www.foodhat.app/?rOpeningTime=08:00&rClosingTime=20:00&rClosedUntil=2019-08-19&pId=557&rId=69&goTo=CUSTOMER_PRODUCT_DETAILS&cName=Duhok&pName=%D9%85%D9%86%D8%B3%D9%81+%D8%AF%D9%88%D9%84%D9%85%D8%A9&rName=Mansaf+Alzain&rMinOrderValue=15000"

print(str.removingPercentEncoding!)
//https://www.foodhat.app/?rOpeningTime=08:00&rClosingTime=20:00&rClosedUntil=2019-08-19&pId=557&rId=69&goTo=CUSTOMER_PRODUCT_DETAILS&cName=Duhok&pName=منسف+دولمة&rName=Mansaf+Alzain&rMinOrderValue=15000

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

При декодировании URL вы должны использовать URLComponents:

let url = URL(string:"https://www.foodhat.app/?rOpeningTime=08:00&rClosingTime=20:00&rClosedUntil=2019-08-19&pId=557&rId=69&goTo=CUSTOMER_PRODUCT_DETAILS&cName=Duhok&pName=%D9%85%D9%86%D8%B3%D9%81+%D8%AF%D9%88%D9%84%D9%85%D8%A9&rName=Mansaf+Alzain&rMinOrderValue=15000")!

let components = URLComponents(url: url, resolvingAgainstBaseURL: false)

print(components)

Вывод:

[rOpeningTime=08:00, rClosingTime=20:00, rClosedUntil=2019-08-19, pId=557, rId=69, goTo=CUSTOMER_PRODUCT_DETAILS, cName=Duhok, pName=منسف+دولمة, rName=Mansaf+Alzain, rMinOrderValue=15000]
0 голосов
/ 09 марта 2020

Используйте взамен str.replacingOccurferences (). Лучшим решением было бы использовать «URLComponents», «queryItems» для выполнения фильтрации по целевому queryItem, чтобы гарантировать, что удаление «+» не выполняется для всего URL.

...