NSDataDetector检测链接中的特殊字符

时间:2016-05-30 13:51:07

标签: ios swift nsdatadetector

我正在使用NSDataDetector扫描文本中的链接,然后返回它们。我已经将它用于常规字母表,但由于我住在一个英语字母表中添加了一些内容的国家,我无法通过NSDataDetector来检测包含这些字符的链接。

具体而言,“åäö”不起作用。我的代码如下所示:

 var urlStrings = [String]()

 let types: NSTextCheckingType = .Link

 do {
        let detector = try NSDataDetector(types: types.rawValue)
        let matches = detector.matchesInString(self, options: .ReportCompletion, range: NSMakeRange(0, self.characters.count))

        for match in matches {

            if let url = match.URL?.absoluteString {
                urlStrings.append(url)
            }
        }
        return urlStrings
      } catch {
        return urlStrings
   }

2 个答案:

答案 0 :(得分:0)

您好我对您的代码进行了一些修改,并为我完美地工作

func detectLinks() -> [String]
{
    let string = "http://www.gåäögle.com/testMasåäö http://www.google.com/testMasåäö http://www.gp.se/livsstil/konsument/vegetariskt-ä4r-inte-alltid-så5-nyttigt-1.1236926"
    var urlStrings = [String]()

    let types: NSTextCheckingType = .Link

    do {
        let detector = try NSDataDetector(types: types.rawValue)
        let matches = detector.matchesInString(string, options: .ReportCompletion, range: NSMakeRange(0, string.characters.count))

        for match in matches {

            if let url = match.URL?.absoluteString {
                urlStrings.append(url)
            }
        }
        return urlStrings
    } catch {
        return urlStrings
    }


}

也许你的问题与self.characters.count有关,你可以检查什么是错的,但对我来说这个代码工作正常,urlStrings在运行此代码后包含3个字符串。我希望这能帮到你

答案 1 :(得分:0)

我正在使用此代码制作不会崩溃的链接,如果其中有特殊字符,例如:“æøå”

var url = "http://www.someurlwithæøåorsomethingelse.com"
let safeUrl = url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())