我发送的帖子包含文字,数字和数据.数字和数据工作正常,但我遇到文本问题,因为它可能包含&符号(&).例如
page.PHP?text=Hello World & Space.
现在我发现了“&”由服务器接收,但读取就像新变量开始一样.所以它看到(我认为):
text = "Hello World " Space. =
我确实读过,我可以尝试对文本进行编码,使其看起来像是一个URL(比如“”[space]变成“”)但是没有办法正确编码.我得出结论:
textToPOST = [text stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
但这不会编码&符号,而是编码其他所有内容.结果是:
some text ü blablabla
变成
some%20text%20ü%20blablabla
与&没有编码.那我怎么能这样做,请帮忙.
非常感谢
解决方法
不幸的是,stringByAddingPercentEscapesUsingEncoding不是URL编码,因为大多数人都理解它.它会转义在URL中完全无效的字符,但不包含在URL中具有特殊含义的字符.因此,它可用于“纠正”无效的用户输入的URL,但它非常不适合从转义路径和查询字符串组件创建URL.
(在JavaScript术语中,它类似于encodeURI而不是您经常需要的那个是encodeURIComponent.)
因此,为了正确地做到这一点,你需要另一种方法,无论是你自己的方法还是现有框架的捏合(这是一个非常常见的痛点,所以很多库都有解决方法).可以使用CFURLCreateStringByAddingPercentEscapes
实现.有关示例代码,请参阅this answer.