URL中文转义和特殊字符处理

一、URL和URL编码

URL(统一资源定位器)是网页的地址。

URL编码:浏览器用来打包表单输入的格式。

URL特点:

1、URL只能使用ASCII字符集通过因特网传输。

2、URL不能包含空格。URL编码通常使用“+”来代替空格(个人认为还是%20更靠谱)。

URL编码特点:

1、URL编码就是用“%”后跟两位该字符所对应的十六进制数。比如?,其URL编码结果为:%3F。

2、URL编码使用“%”其后跟随两位十六进制数来替换非ASCII字符。比如中文;胡的URL编码结果为:%BA%FA。

3、对于ASCII字符中的所有字符URL都可以进行编码。比如A,URL编码结果为:%41。

实际的URL中,URL常常包含ASCII集合之外的字符(比如中文),因此URL必须转换为有效的ASCII格式。

二、URL转义(百分号转义)

URL转义其实就是对URL中的中文、空格及其不安全字符(歧义字符)的处理。而这个处理就是URL编码。

1、中文是非ASCII字符。因此若想成为URL的一部分在因特网传输,必须经过URL编码的处理。

2、空格显然也是URL所不允许的。必须经由URL编码处理。

3、不安全字符。比如“/”在URL中用于分割路径中的各个元素。若你不希望该斜线当作分隔符使用,而仅仅是当作一个斜杠,那么必须经过URL编码处理(结果为:%2F)。

温馨提示:

其实URL中除了必须转义的字符(中文、空格、不安全字符)外,其他的字符可转可不转。原因就是其他字符属于安全字符,不会出现歧义,得到错误的结果。当然,所有的字符都转义结果更是正确无误。

三、iOS中百分号转义方法

1、方法一

stringByAddingPercentEscapesUsingEncoding:

9.0以后过时。用stringByAddingPercentEscapesUsingEncodingWithAllowedCharcters代替。

此方法的弊端在于它只对其中的14个字符可以编码。(目前具体14个确定与否,尚未实测)

14个可编码字符如下:'#%^{}[]|\"<>外加一个空格。

2、方法二

CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding)

9.0以后过时。用stringByAddingPercentEscapesUsingEncodingWithAllowedCharcters代替。

CFAllocatorRef allocator                                        :默认为KCFAllocatorDefault。

CFStringRef originalSring                                      :待转义的字符串

CFStringRef charactersToLeaveUnescaped         :指定不需要转义的字符

CFStringRef legalURLCharactersToBeEscaped   :指定需要转义的字符

CFStringEncoding encoding                                  :编码类型(一般utf-8)

3、方法三

stringByAddingPercentEncodingWithAllowedCharacters:(NSCharacterSet *)allowedCharacters

9.0以后的新方法。推荐使用

allowedCharacters      :指定的不需要被转义的字符集合。


方法使用:

NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"];

            NSString *result = [@"abcd+/0123" stringByAddingPercentEncodingWithAllowedCharacters:characterSet];

结果为 result=abcd%2B%2F0123。






你可能感兴趣的:(url编码,url转义)