in Blog Posts, Solution

URL编码和字符转义

使用基于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下:
& —-> \&
< —-> &lt;
> —-> &gt;
‘ —-> &apos;
” —-> &quot;

SQL下(MS Access):
# —-> ##
! —-> !!
‘ —-> ”