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