使用基于Web的服务时,可能会需要在代码里生成URL。这里就涉及到URL的编码 (Encode) 和 解码 (Decode) 。
一个小工具,用来手工Encode/Decode:
Tools/Dencoder
IPHONE下可以使用stringByAddingPercentEscapesUsingEncoding来编码。
但是实际使用中,编码后的URL仍然可能会无效。因为URL的编码方式并不唯一。参见:
Encode-Compare 和 URLEncoding
NSString* escapedURLString = [unescapedString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
不同的编码方式下,有些字符不会被编码。
所以,客户端使用什么样的编码方式应该和服务器端的解码方式配对。
可以使用CFURLCreateStringByAddingPercentEscapes
编码URL中参数部分后,再用前面stringByAddingPercentEscapesUsingEncoding编码,应该可以适应多数解码方式。
NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes (NULL, (CFStringRef)yourtext, NULL, (CFStringRef)@”!*’();:@&=+$,/?%#[]“, kCFStringEncodingUTF8);
使用中发现,除了编码问题以外,字符的转义也是问题,这里附上一些常用的转义处理:
Javascript下:
转义字符: ‘\’
$转义为\$
XML下:
& —-> \&
< —-> <
> —-> >
‘ —-> '
” —-> "
SQL下(MS Access):
# —-> ##
! —-> !!
‘ —-> ”