Если ваш пересмотренный вопрос, вы дадите нам следующий URL:
let string = "hxxps://ue.pt.com/v2/url?u=https-3A__oe.le.com_-3Fauthkey-3D-2521IB-2DCRV-2DqQ88-26cid-3DBACDF2ED353D-26id-3DBACDF2EFB61D353D-2521549-26parId-3Droot-26o-3DOneUp&d=DwMGaQ&c=WNpQK9bFmT89misLWAzsd66s44iGV-VujF_o4whjrfc&r=Ej_UhLznQMBqt3H3IYBQkjyx4xqdnS9mLiYA&m=HOBrLfxamFr4PYdACIR-A49th_oIe3MW69N7X-E&s=bXWSJ8gaSbKSlNuIf30S7Qsa6RcMKA-EOvP577XUyq0&e="
Очевидно, -3A__
- ://
, _-3F
- /?
, -26
- &
, -3D
- это =
и т. Д. Итак, если вы сделаете:
let replacements = [
"-3A__": "%3A//",
"_-3F": "/%3F",
"-26": "%26",
"-3D": "%3D",
"-2D": "%2D",
"-25": "%25"
]
let result = replacements.reduce(string) { (string, tuple) -> String in
return string.replacingOccurrences(of: tuple.key, with: tuple.value)
}
let components = URLComponents(string: result)!
for item in components.queryItems! {
print(item.name, item.value!)
}
Вы закончите вызовом hxxps://ue.pt.com/v2/url
со следующими параметрами:
u https://oe.le.com/?authkey=%21IB-CRV-qQ88&cid=BACDF2ED353D&id=BACDF2EFB61D353D%21549&parId=root&o=OneUp
d DwMGaQ
c WNpQK9bFmT89misLWAzsd66s44iGV-VujF_o4whjrfc
r Ej_UhLznQMBqt3H3IYBQkjyx4xqdnS9mLiYA
m HOBrLfxamFr4PYdACIR-A49th_oIe3MW69N7X-E
s bXWSJ8gaSbKSlNuIf30S7Qsa6RcMKA-EOvP577XUyq0
e
Ключздесь параметры authkey
, cid
, id
, parId
и o
предназначены для URL oe.le.com
, но все остальные параметры d
, c
, r
, m
, s
и e
являются , а не частью URL, закодированной как часть u
, а скорее являются отдельными параметрами для ue.pt.com
URL.Вы не хотите включать их как часть URL-адреса для oe.le.com
.
Мой оригинальный ответ приведен ниже.
Давайте попробуем подойти к этой проблеме с другой стороны.
Рассмотрим эти два сценария, в которых я создаю URL.Во-первых, у меня есть один параметр для g.com
, который является u
, который является URL-адресом с параметрами:
var components = URLComponents(string: "http://g.com")!
components.queryItems = [
URLQueryItem(name: "u", value: "http://a.com/test?d=foo&e=bar")
]
let url = components.url
Вы увидите, что URL-адрес равен
http://g.com/?u=http://a.com/test?d%3Dfoo%26e%3Dbar
Обратите внимание, что =
и &
в процентах экранированы как %3D
и %26
, соответственно, поскольку они являются параметрами URL-адреса, скрытого внутри соответствующего значения.с параметром u
, а не параметрами самого URL g.com
.
Альтернативный сценарий состоит в том, что URL g.com
имеет три параметра: u
, d
и e
:
var components2 = URLComponents(string: "http://g.com")!
components2.queryItems = [
URLQueryItem(name: "u", value: "http://a.com/test"),
URLQueryItem(name: "d", value: "foo"),
URLQueryItem(name: "e", value: "bar")
]
let url2 = components2.url
Это дает:
http://g.com/?u=http://a.com/test&d=foo&e=bar
Обратите внимание, что =
и &
не являются процентами, сбежавшими в процентахпоскольку они являются параметрами URL-адреса g.com
, а не параметрами URL-адреса a.com
, содержащимися в значении u
.
Вы, похоже, предоставляете нам URL-адрес, подобный второму сценарию, но настаиваете на том, чтобыэто действительно похоже на первый сценарий.Если это правда, исходный URL не был правильно закодирован в процентах и является недействительным.Скорее всего, применяется второй сценарий, и параметры имеют URL-адрес g.com
, не предназначенный для включения в значение u
.
Обратите внимание, что вы далинам URL:
hxxp://www.g.com/url?u=http://a.com/test&d=another
Если бы d
действительно был параметром a.com
URL, то этот URL был бы http://a.com/test?d=another
, а неhttp://a.com/test&d=another
(обратите внимание на ?
, а не &
.)
Так что это еще одно доказательство того, что параметр d
действительно является параметром g.com
url, и что u
параметр на самом деле просто http://a.com/test
.