webview中url特殊字符处理

url中经常出现中文,想到最直接的办法是把url转码,如下:

NSString *urlString = @"192.168.1.1/app/index.html#/serviceCase/制造业";

urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet];

NSCharacterSet 中不同方法 处理的特殊字符不一样:

URLFragmentAllowedCharacterSet "#%<>[\]^`{|}

 URLHostAllowedCharacterSet      "#%/<>?@\^`{|}

 URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}

 URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}

URLQueryAllowedCharacterSet    "#%<>[\]^`{|}

 URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

iOS 9.0以前用这个方法:stringByAddingPercentEscapesUsingEncoding:  。

可能项目中用这种方法转码了 发现webview还是加载不出来,网上找个几种方法还是不行,怎么办呢,这时候你就要搞清楚 系统的转码方法到底转了些什么东西,上面写的很清楚,不管你是用 URLFragmentAllowedCharacterSet还是URLPasswordAllowedCharacterSet,还是其他等等,#号都当着特殊字符转码了,而你的网页中#可能是个锚点不需要转码,不需要转码的你转了网页肯定加载不出来。遇到这种情况要和前端工程师协商,如果是因为中文编码不支持那只转中文就行了,如下:

NSString * parm = [@"制造业" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];

NSString *link = [NSString stringWithFormat:@"192.168.1.1/app/index.html#/serviceCase/%@",parm];

这样写就可以。在你的项目中可能不止是#,/ %等有可能出现,首先搞清楚具体哪些是要转,哪些不要转。目的明确了,对症下药。

你可能感兴趣的:(webview中url特殊字符处理)