我无法弄清楚如何替换字符串中的所有特殊字符并将其转换为我可以在URL中使用的字符串。
我用它来做什么:
我正在上传图片,将其转换为base64
,然后将其传递给Laravel框架,但base64 string
可以包含+, /, \
等,这会更改网址的含义。< / p>
我可以使用以下代码替换+
符号:
let withoutPlus = image.stringByReplacingCharactersInRange("+", withString: "%2B")
然而,我不能将其用作NSString
来尝试更改其他字符。
当然有一种方法可以定位每个特殊字符并将其转换为URL中可用的内容吗?
答案 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发送文件,而不是将其编码到您的网址