9
votes

Symbole dièse ajouté à l'URL dans iOS 14

J'ai une application en cours d'exécution sur un serveur Web, qui redirige vers une application installée sur un appareil iOS 14. l'url est sous la forme de

myapp://?p=someBase64EncodedString

et l'application décode la chaîne. après la mise à niveau vers iOS 14, l'URL que l'application obtient est

myapp://?p=someBase64EncodedString# et le symbole dièse ajouté à la fin de la chaîne ne parvient pas à décoder sur mon appareil. Lorsque vous utilisez ignoreUnknownCharacters tout fonctionne ignoreUnknownCharacters , mais d'où vient ce # ?


2 commentaires

Comment l'application décode-t-elle l'URL? Un # est parfaitement valide dans une URL et indique le début du fragment. Voir aussi stackoverflow.com/questions/6691495/...


Pouvez-vous publier l'URL complète? (y compris le someBase64EncodedString )


3 Réponses :


0
votes

Il peut s'agir d'une action API dans une redirection pour une API que vous avez utilisée. Si tel est le cas, il est hors de votre contrôle et potentiellement hors de portée de l'accès.


0 commentaires

2
votes

Comme @jtbandes l'a mentionné dans les commentaires, # est un caractère valide dans une URL.

Pour éviter ce genre de problèmes, le moyen le plus sûr d'analyser une URL consiste à utiliser URLComponents , en suivant cette réponse.

Voici un exemple:

scheme: https
host: test.host.com
port: 8080
path: /Test/Path
query: test_parameter=test_value
queryItems: [test_parameter=test_value]
fragment: test-fragment

Cela aura comme sortie:

let urlString = "https://test.host.com:8080/Test/Path?test_parameter=test_value#test-fragment"
let urlComponents = URLComponents(string: urlString)

print("scheme: \(urlComponents?.scheme ?? "nil")")
print("host: \(urlComponents?.host ?? "nil")")
print("port: \(urlComponents?.port ?? -1)")
print("path: \(urlComponents?.path ?? "nil")")
print("query: \(urlComponents?.query ?? "nil")")
print("queryItems: \(urlComponents?.queryItems ?? [])")
print("fragment: \(urlComponents?.fragment ?? "nil")")


0 commentaires

2
votes

Swift 5 et les chaînes brutes pourraient-ils être le coupable? Je suppose que l'application utilise # comme délimiteur de chaîne personnalisé et, lors du décodage, remplace un caractère spécial par un #.


1 commentaires