我不得不从stringByAddingPercentEscapesUsingEncoding切换到CFURLCreateStringByAddingPercentEscapes,因为它不会转义问号(?).我很好奇它究竟逃脱了什么,以及部分转义与RFC 3986背后的基本原理.
解决方法
已经创建了一些很好的类别来满足您的需求:
http://iosdevelopertips.com/networking/a-better-url-encoding-method.html
http://www.cocoanetics.com/2009/08/url-encoding/
http://iosdevelopertips.com/networking/a-better-url-encoding-method.html
http://www.cocoanetics.com/2009/08/url-encoding/
保留某些字符的理由超出了我…除了说函数的定义是:使用给定的编码返回接收器的表示,以确定将接收器转换为合法URL字符串所需的转义百分比.
要完全正确,并且&是URL中的合法字符,而空格则不是.因此,该方法将正确地逃离空间,但离开和&完整.
阅读RFC2396 http://www.ietf.org/rfc/rfc2396.txt – 定义了一组保留和未保留的字符.我的猜测是这些字符都没有被stringByAddingPercentEscapesUsingEncoding转义.