2017-11-16 3 views
2

나는이 URL이 있습니다. 지금까지 너무 좋아문자열이 이미 특수 문자로 특수 이스케이프 처리되었는지 알아 보는 방법은 무엇입니까?</p> <pre><code>"http://www.somedomain.com/folder/مرحبا المستخدم.jpg" </code></pre> <p>그래서 나는 그것이 <code>URL</code> 개체를 만들 수없는 것입니다 다른 사람이 아랍어 값을 탈출해야합니다 :

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'이 (이미 백분율로 인코딩 된) "+"문자열이거나 "% 252B %"로 인코딩되어야하는 "% 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은

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를 사용합니다.

0

내가 이것을 테스트 할 수 없습니다,하지만 내가 비교 먼저 '언 이스케이프'원래 문자열을 시도하고 것 결과는 원래 문자열과 같습니다. 일치하면 원래 문자열에 이스케이프가 없습니다. 일치하지 않으면 원래 문자열이 이미 이스케이프되었습니다.

관련 문제