swift 4.2, url.appendingPathComponent - PullRequest
0 голосов
/ 28 декабря 2018
let url = URL(string: "https://example.com")
let path = "/somePath?"
let urlWithPath = url?.appendingPathComponent(path)

У меня проблема, path = "/somePath?".

Но после добавления путь становится somePath% 3F (? Стать% 3F)

Если сделать этот трюквсе в порядке

let urlFormString = URL(string:"https://example.com/somePath?")

почему, когда я пытаюсь добавить PathComponent, у меня есть (? стать% 3F)

как исправить то, что мне нужен URL с помощью '?'но получите URL с "% 3F"

Ответы [ 6 ]

0 голосов
/ 14 июня 2019

Вы можете создать свой URL, используя NSString class:

let urlStr = "https://example.com" as NSString
let path = "/somePath?"
let urlStrWithPath = urlStr.appendingPathComponent(path)
let url = URL(string: urlStrWithPath)

Таким образом, специальные символы не кодируются в окончательном URL-адресе.

0 голосов
/ 28 декабря 2018

Общий формат URL следующий:

scheme:[//[userinfo@]host[:port]]path[?query][#fragment]

Вам нужно понять, что ? не является частью path.Это разделитель между path и query.

Если вы попытаетесь добавить ? к пути, он должен быть закодирован в URL, поскольку ? не является допустимым символом для компонента пути.

Лучшим решением было бы сбросить ? с path.Там нет никакого смысла.Однако если у вас есть частичный URL-адрес, который вы хотите добавить к базовому URL-адресу, вы должны объединить их в виде строк:

let url = URL(string: "https://example.com")
let path = "/somePath?"
let urlWithPath = url.flatMap { URL(string: $0.absoluteString + path) }

Короче говоря, appendingPathComponent не является функцией, которую следует использовать длядобавить запрос URL.

0 голосов
/ 28 декабря 2018

Вы должны использовать removingPercentEncoding для URL absoluteString,

let url = URL(string: "https://example.com")
let path = "/somePath?"
let urlWithPath = url?.appendingPathComponent(path).absoluteString.removingPercentEncoding
print(urlWithPath!)
0 голосов
/ 28 декабря 2018

Прежде всего это не проблема.это механизм, называемый URL-кодированием, для перевода непечатаемых или специальных символов в общепринятый формат веб-серверами и браузерами.

Для получения дополнительной информации вы можете перейти к https://www.techopedia.com/definition/10346/url-encoding

символам в кодировке URL, https://www.degraeve.com/reference/urlencoding.php

0 голосов
/ 28 декабря 2018

Когда вы преобразуете строку в URL, она будет выполнять PercentEncoding в URL.Чтобы ваш ? был закодирован в %3F.

Если вы хотите, чтобы URL-адрес представлял собой строку с ?, вы можете удалить кодирование PercentEncoding, как показано ниже:

let urlString = urlWithPath?.absoluteString.removingPercentEncoding

Output: https://example.com/somePath?

0 голосов
/ 28 декабря 2018

%3F означает ?, в соответствии с кодировкой URL.Так что если вы создаете URL - так должно быть.Если по какой-то причине вам нужен ?, создайте строку, а не URL.

Проверьте urlWithPath.lastPathComponent, чтобы убедиться, что все в порядке (печатает: "somePath?")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...