WKWebView 未在 URL 中打开带有梵文字体的 URL

Posted

技术标签:

【中文标题】WKWebView 未在 URL 中打开带有梵文字体的 URL【英文标题】:WKWebView not opening URL with devanagari font in URL 【发布时间】:2019-05-31 05:10:34 【问题描述】:

我正在尝试集成银行的支付网关集成。但是WKWebView 不会加载 URL。

我试图在WKWebView 中加载的 URL 是

这里是网址: http://www.mpenagarpalika.gov.in/EasyPay20/EncDataPage.jsp?copr_id=3163&requestId=XXXX&customerRefNo=XXXX&amount=3937.000&version=1.0&type=PRD&currency=INR&returnURL=http%3a%2f%2fwww.mpenagarpalika.gov.in%2fwt_easypay1res%2fgetdecrypt&prePopulatedInfo=1000000001%7c0274%7cW10000011447%7cINR%7c3937.000&reserveField1=MN&reserveField2=WTax&reserveField3=Water_Tax&reserveField4=समीम&reserveField5=वार्ड%20क्र%2006%20%20जवाहरलाल&bankReferenceNumber=W10000011447&fromSenderIP=99.199.255.199

当我尝试在笔记本电脑浏览器上运行相同的 URL 时,它工作正常。

我已经尝试了这些选项:

let hiturl = paymentPageURL.addingPercentEncoding(withAllowedCharacters: CharacterSet(charactersIn: "!*'();:@&=+$,/?%#[] ").inverted)

let hiturl = paymentPageURL.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)

我做错了什么?

【问题讨论】:

你试过 .urlPathAllowed 了吗? 是的,我试过了。它不工作 .urlPathAllowed 在这种情况下不起作用。我相信你需要在将它们添加到 URL 之前对你的梵文参数进行编码,这对我来说是新的。 试试这个:***.com/a/30149081/1042817 我已经提到了这个问题。这也行不通。 【参考方案1】:

我只是为您带来了一个经过测试的解决方案。请尝试以下代码:

let sampleURL = "http://www.mpenagarpalika.gov.in/EasyPay20/EncDataPage.jsp?copr_id=3163&requestId=XXXX&customerRefNo=XXXX&amount=3937.000&version=1.0&type=PRD&currency=INR&returnURL=http%3a%2f%2fwww.mpenagarpalika.gov.in%2fwt_easypay1res%2fgetdecrypt&prePopulatedInfo=1000000001%7c0274%7cW10000011447%7cINR%7c3937.000&reserveField1=MN&reserveField2=WTax&reserveField3=Water_Tax&reserveField4=समीम&reserveField5=वार्ड%20क्र%2006%20%20जवाहरलाल&bankReferenceNumber=W10000011447&fromSenderIP=99.199.255.199/"

if let encoded = urlString.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed),
            let myURL = URL(string: encoded)
        
            print(myURL)
            let myRequest = URLRequest(url: myURL)
            myWebView.load(myRequest)
        

还有一点很重要,请不要忘记在info.plist中添加以下行以进行延迟加载,否则WKWebView无法加载url。

<key>NSAppTransportSecurity</key>
<dict>
  <!--Include to allow all connections (DANGER)-->
  <key>NSAllowsArbitraryLoads</key>
      <true/>
</dict>

【讨论】:

【参考方案2】:

解决办法是:url中所有不同语言的字符都需要base64编码。

【讨论】:

不是我的投票,但如果您展示了完成这项工作所需的代码,您的回答会好很多。 base64 编码可能对您有用,但对所有人都适用吗?我的意思是easypay接受base64编码的内容并对其进行解码。再次不是我的反对票。

以上是关于WKWebView 未在 URL 中打开带有梵文字体的 URL的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中 WKWebView 的后台历史显示带有父 URL 的子 URL

WKWebView POST 请求

WKWebView:表单未在 WKWebView (Swift) 中提交

WKWebview 未在 iOS 10.3 中完全加载

WKWebView 未在设备上运行

iframe 未在 WKWebview 中加载