2017-11-16 20 views
2

私はこのURLを持っている:文字列がすでに特殊文字で特殊文字でエスケープされているかどうかを知るには?

"http://www.somedomain.com/folder/مرحبا المستخدم.jpg" 

だから私はそれがURLオブジェクトを作成することはできないだろう、他のこれらのアラビア語の値をエスケープする必要があります。これまでのところは良い

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

:私はこのようにそれをやっている

let originalString = "http://www.somedomain.com/folder/مرحبا المستخدم.jpg" 
let escapedString = originalString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 

これはescapedStringの出力となります。しかし、すでにエスケープされたURLからエスケープしようとすると、結果は変です。

文字列が既にエンコードされているかどうかを確認するにはどうすればよいですか?

+2

@Hermang:なぜこの文字列を最初にダブルエスケープしようとしていますか? –

+0

@DerekBrown、私はそれをやっているのかどうか分からないのですか?これについてもっと教えてください。 – Hemang

+1

'%2B'が(すでにパーセント符号化された)" + "文字列か、'%2BB% 'として符号化されなければならない文字列"%2B "であるかどうかを決める*方法はありません。あなたの文字列がパーセントでエンコードされているかどうかを知るべきです。 –

答えて

2

あなたがスムーズにそれを行うことができます。その後、

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 
0

私は分かりませんが、仕事になるかもしれません。

あなたのURLが有効であるかどうかを確認することができます。有効であれば、エイジングをエスケープする必要はありません。チェックURLのよう

は直接escapedStringを使用し、有効かどうか

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) 
} 

その他賢明です。

0

私はこれをテストすることはできませんが、私は最初の「アンエスケープ」に元の文字列を試し、その後、比較でしょう結果は元の文字列になります。一致した場合、元の文字列にエスケープ文字はありません。一致しない場合、元の文字列はすでにエスケープされています。

関連する問題