 
     public func parseOptionalURL(_ keyPath: String) throws -> URL? {
         guard let string = try parseOptionalString(keyPath) else { return nil }
-        let sanitized = string.folding(options: .diacriticInsensitive, locale: .current)
+        let sanitized = String(describing: string.unicodeScalars.filter { _validURLCharacters.contains($0) }.reduce("") { $0.0 + String(describing: $0.1) }).folding(options: .diacriticInsensitive, locale: .current)
         guard let parsed = URL(string: sanitized) else {
             throw ParseError.valueNotParseable(keyPath: keyPath, type: URL.self)
         }


    public func parseURL(_ keyPath: String) throws -> URL {
        let string = try parseString(keyPath)
        let sanitized = string.folding(options: .diacriticInsensitive, locale: .current)
        guard let parsed = URL(string: sanitized) else {
            throw ParseError.valueNotParseable(keyPath: keyPath, type: URL.self)
        }


private let _dateFormatter = DateFormatter()
private let _8601DateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
private let _validURLCharacters = CharacterSet.urlHostAllowed.union(.urlPathAllowed).union(.urlFragmentAllowed).union(.urlQueryAllowed)

// MARK: - NSDictionary Extension
public extension NSDictionary {
