如何知道一个字符串是否已经用特殊字符进行了特殊转义?
How to know if a string is already escaped special with special characters?
我有这个URL:
"http://www.somedomain.com/folder/مرحبا المستخدم.jpg"
所以我需要转义这些阿拉伯值,否则它将无法创建 URL
对象。
我是这样做的,
let originalString = "http://www.somedomain.com/folder/مرحبا المستخدم.jpg"
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
这将是 escapedString
的输出:
http://www.somedomain.com/folder/%D9%85%D8%B1%D8%AD%D8%A8%D8%A7%20%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85.jpg
到目前为止一切顺利。但是当我强制尝试逃脱一个已经逃脱的URL时,结果很奇怪。
如何检查字符串是否已经编码?
我不知道,但可能有用。
你可以检查你的 URL 是否有效,如果它有效则不需要转义 agin 如果不是那么你应该转义它。
点赞检查URL是否有效
func isValidMyURL (_ urlString: NSString) -> Bool {
let urlRegEx = "((?:http|https)://)?(?:www\.)?[\w\d\-_]+\.\w{2,3}(\.\w{2})?(/(?<=/)(?:[\w\d\-./_]+)?)?"
return NSPredicate(format: "SELF MATCHES %@", urlRegEx).evaluateWithObject(urlString)
}
然后
if !isValidMyURL(originalString) { // If not valid then escape it
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
}
否则直接使用escapedString
.
你可以顺利完成:
extension String {
func isEscaped() -> Bool {
return self.removingPercentEncoding != self
}
}
然后
let yourEscapedString = "http://www.somedomain.com/folder/%D9%85%D8%B1%D8%AD%D8%A8%D8%A7%20%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85.jpg"
print(yourEscapedString.isEscaped()) // true
let yourNotEscapedString = "http://www.somedomain.com/folder/مرحبا المستخدم.jpg"
print(yourNotEscapedString.isEscaped()) // false
我无法对此进行测试,但我会尝试先 'unescape' 原始字符串,然后将结果与原始字符串进行比较。如果它们匹配,则原始字符串中没有转义。如果它们不匹配,则原始字符串已被转义。
我有这个URL:
"http://www.somedomain.com/folder/مرحبا المستخدم.jpg"
所以我需要转义这些阿拉伯值,否则它将无法创建 URL
对象。
我是这样做的,
let originalString = "http://www.somedomain.com/folder/مرحبا المستخدم.jpg"
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
这将是 escapedString
的输出:
http://www.somedomain.com/folder/%D9%85%D8%B1%D8%AD%D8%A8%D8%A7%20%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85.jpg
到目前为止一切顺利。但是当我强制尝试逃脱一个已经逃脱的URL时,结果很奇怪。
如何检查字符串是否已经编码?
我不知道,但可能有用。
你可以检查你的 URL 是否有效,如果它有效则不需要转义 agin 如果不是那么你应该转义它。
点赞检查URL是否有效
func isValidMyURL (_ urlString: NSString) -> Bool {
let urlRegEx = "((?:http|https)://)?(?:www\.)?[\w\d\-_]+\.\w{2,3}(\.\w{2})?(/(?<=/)(?:[\w\d\-./_]+)?)?"
return NSPredicate(format: "SELF MATCHES %@", urlRegEx).evaluateWithObject(urlString)
}
然后
if !isValidMyURL(originalString) { // If not valid then escape it
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
}
否则直接使用escapedString
.
你可以顺利完成:
extension String {
func isEscaped() -> Bool {
return self.removingPercentEncoding != self
}
}
然后
let yourEscapedString = "http://www.somedomain.com/folder/%D9%85%D8%B1%D8%AD%D8%A8%D8%A7%20%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85.jpg"
print(yourEscapedString.isEscaped()) // true
let yourNotEscapedString = "http://www.somedomain.com/folder/مرحبا المستخدم.jpg"
print(yourNotEscapedString.isEscaped()) // false
我无法对此进行测试,但我会尝试先 'unescape' 原始字符串,然后将结果与原始字符串进行比较。如果它们匹配,则原始字符串中没有转义。如果它们不匹配,则原始字符串已被转义。