用有效的URL字符替换String中的所有特殊字符

时间:2014-10-12 18:28:51

标签: swift

我无法弄清楚如何替换字符串中的所有特殊字符并将其转换为我可以在URL中使用的字符串。

我用它来做什么: 我正在上传图片,将其转换为base64,然后将其传递给Laravel框架,但base64 string可以包含+, /, \等,这会更改网址的含义。< / p>

我可以使用以下代码替换+符号:

let withoutPlus = image.stringByReplacingCharactersInRange("+", withString: "%2B")

然而,我不能将其用作NSString来尝试更改其他字符。

当然有一种方法可以定位每个特殊字符并将其转换为URL中可用的内容吗?

3 个答案:

答案 0 :(得分:5)

您可以根据需要使用stringByAddingPercentEncodingWithAllowedCharacters转义字符。您传递的NSCharacterSet包含对该字符串有效的字符(即您想要替换的字符)。内置NSCharacterSet用于网址查询字符串中允许使用的字符,它们可以帮助您完成大部分工作,但它包括+/,因此您可以使用removeCharactersInString需要从集合中删除它们。您可以通过制作集的可变副本,然后调用let allowedCharacters = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy() as NSMutableCharacterSet allowedCharacters.removeCharactersInString("+/=")

来实现
stringByAddingPercentEncodingWithAllowedCharacters

然后,您可以在字符串上调用allowedCharacters,传入let encodedImage = image.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacters)

String

请注意,它会返回一个可选的String?if let encodedImage = image.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacters) { /* use encodedImage here */ } else { /* stringByAddingPercentEncodingWithAllowedCharacters failed for some reason */ } ),因此您可能希望使用可选绑定:

let unencodedString = "abcdef/+\\/ghi"

let allowedCharacters = NSCharacterSet.URLQueryAllowedCharacterSet().mutableCopy() as NSMutableCharacterSet
allowedCharacters.removeCharactersInString("+/=")

if let encodedString = unencodedString.stringByAddingPercentEncodingWithAllowedCharacters(allowedCharacters) {
    println(encodedString)
}

示例:

{{1}}

打印:

  

ABCDEF%2F%2B%5C%2Fghi

答案 1 :(得分:0)

使用

let withoutPlus = image.stringByReplacingOccurrencesOfString("+", withString: "%2B")

而不是image.stringByReplacingCharactersInRange。请注意,您发布的调用不起作用,因为该方法被声明为

func stringByReplacingCharactersInRange(range: Range<String.Index>, withString replacement: String) -> String 

并且您没有提供正确的参数。

答案 2 :(得分:0)

您最好使用POST发送文件,而不是将其编码到您的网址