2017-09-15 4 views
3

UIActivityViewController이 Mail 및 WeChat에 대해 약간 변환 된 문자열을 보낸 이유를 알아 내려고했습니다.Apple이 UIActivityViewController에서 문자열을 잘못 변환 한 것처럼 보입니다.

let activityViewController = UIActivityViewController(activityItems: ["http://preprodgo.travelstart.com/search-on-index?version=3&timestamp=2017-09-15_10-31-27-031"], applicationActivities: nil) 

self.present(activityViewController, animated: true, completion: nil) 

및 메일로 공유 할 때,이 같이 나타났다 :

http://preprodgo.travelstart.com/search-on-index?version=3×tamp=2017-09-15_10-31-27-031 

시스템 버전은 10.3.3입니다

이 내 코드입니다.

+0

시스템 구성은 무엇입니까? 나는 Mail 애플 리케이션으로 iOS 11 GM에서 복사 할 수 있지만 Copy 및 Messages는 재생할 수 없습니다. –

답변

2

mailWechat에 공유 할 때 특별한 경우를 제공함으로써 해결 : HTML을 탈출하기위한 주위의 작업

@objc class TSActivityProvider: NSObject, UIActivityItemSource { 
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? { 
     //... 
     if activityType == .mail || activityType == .postToWeibo { 
      message = message.xmlSimpleEscape() 
     } 
     return message 
    } 
} 


// https://stackoverflow.com/questions/803676/encode-nsstring-for-xml-html 
extension String 
{ 
    func xmlSimpleEscape() -> String 
    { 
     let mapList : SimpleToFromRepalceList = [ 
      ("&", "&"), 
      ("\"", """), 
      ("'", "'"), 
      (">", ">"), 
      ("<", "&lt;")] 

     return self.simpleReplace(mapList: mapList) 
    } 
} 

종류. Apple은 UIActivityType에 제안 된 구문 분석 방법을 제공하고 문자열을받을 때 자동으로 이스케이프 처리해야한다고 생각합니다.

8

&times;HTML4 entity하고 일반 텍스트로 공유하는 경우는 이메일에 × 기호에 자신을 변환합니다.

대신 URL에 문자열을 변환 :

if let url = URL(string: "http://preprodgo.travelstart.com/search-on-index?version=3&timestamp=2017-09-15_10-31-27-031") { 
    let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil) 
    present(activityViewController, animated: true) 
} 
+0

감사! 그리고 제가 실제로 공유하고 싶어하는 것은 이것이다 : ''' 메시지 = 문자열 (형식 : NSLocalizedString ("share_text_search_result_multi_city", 코멘트 : "이봐, \ NI 단지 %에서 % 1 $ @에서 Flapp에 큰 항공편 발견 $ (% 2 $ @ % 3 $ d. \ n 확인하십시오. \ n \ n % 4 $ @ ") 문자열 (설명 : outboundAirportCityName), 가장 저렴한 가격, 가장 저렴한 가격, 저렴한 가격) ''' 그것을 일반 텍스트로 공유 하시겠습니까? – allenlinli

+0

스트럿과 URL을 두 개의 별도 활동 항목으로 포함하십시오. 이렇게하면 URL이 변환되지 않습니다. – the4kman

+0

이 작동하지 않습니다. 아직 변환 중입니다. – allenlinli

0

당신은

vat urlString = "http://preprodgo.travelstart.com/search-on-index?version=3&timestamp=2017-09-15_10-31-27-031" 
urlString = urlString.StringByReplacingOccurencOf(string:"&", with:"&amp") 
let activityViewController = UIActivityViewController(activityItems: [urlString], applicationActivities: nil) 
self.present(activityViewController, animated: true, completion: nil) 

당신은 또한 HTML 이름으로 모든 URL 특수 문자를 대체 할 수있는 다음 시도 할 수 있습니다.

관련 문제