首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Obj-C的post发送amp (&)

问使用Obj-C的post发送amp (&)
EN

Stack Overflow用户
提问于 2011-07-31 18:12:54
回答 2查看 2.2K关注 0票数 7

我正在发送一个包含文本、数字和数据的帖子。数字和数据工作正常,但文本有问题,因为它可能包含一个与号(&)。例如

代码语言:javascript
复制
page.php?text=Hello World & Space.

现在我发现"&“是由服务器接收的,但读起来就像启动了一个新变量一样。所以它看到(我认为):

代码语言:javascript
复制
text = "Hello World "
Space. =

我确实读到过,我可以尝试对文本进行编码,使其看起来像是一个URL (比如“”空格变成了"%20"),但是没有办法正确地对其进行编码。我得出的结论是:

代码语言:javascript
复制
textToPOST = [text stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

但这并不是对与号进行编码,而是对其他所有内容进行编码。所以结果是:

代码语言:javascript
复制
some text ü blablabla

变成了

代码语言:javascript
复制
some%20text%20ü%20blablabla

使用未编码的&。那么我该怎么做呢,请帮帮忙。

已经非常感谢了

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-01 04:58:45

感谢你的回答,并为我过早的发帖感到抱歉:我希望它至少能帮助任何和我有同样问题的人。我刚和一个朋友聊天,他告诉我:

要在

中显示和与符号,只需使用&引号。与纯"&“不同,NSXMLParser不会输出错误。使用&还允许您进行其他符号转义,如:

  • üin text ->üin HTML -> ü;in XML
  • üin text ->üin HTML -> Ä;in XML
  • ?in text ->?in HTML -> ß;in XML

这就是如何解决“我如何解析带有amp的XML问题”的方法。此外,我还设法使代码,从我在评论中链接到我的原始问题的网站,工作:

代码语言:javascript
复制
NSMutableString *deutschEscaped = [NSMutableString stringWithString:[[deutschTextLabel string] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
[deutschEscaped replaceOccurrencesOfString:@"$" withString:@"%24" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"&" withString:@"%26" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"+" withString:@"%2B" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"," withString:@"%2C" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"/" withString:@"%2F" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@":" withString:@"%3A" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@";" withString:@"%3B" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"=" withString:@"%3D" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"?" withString:@"%3F" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"@" withString:@"%40" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@" " withString:@"%20" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"\t" withString:@"%09" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"#" withString:@"%23" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"<" withString:@"%3C" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@">" withString:@"%3E" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"\"" withString:@"%22" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];
[deutschEscaped replaceOccurrencesOfString:@"\n" withString:@"%0A" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [deutschEscaped length])];

这对我来说工作得很好,确实替代了&符号和任何其他可能的危险。

如果你不想每个空格都有%20个转义,你也可以使用:

代码语言:javascript
复制
NSMutableString *englishEscaped = [NSMutableString stringWithString:[[englishTextLabel string] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

感谢所有人:)

票数 1
EN

Stack Overflow用户

发布于 2011-07-31 18:50:42

不幸的是,stringByAddingPercentEscapesUsingEncoding并不像大多数人所理解的那样是网址编码。它转义URL中完全无效的字符,但不转义URL中具有特殊含义的字符。因此,它可用于“纠正”无效的用户输入的URL,但它非常不适合于从转义路径和查询字符串组件创建URL。

(在JavaScript术语中,它类似于encodeURI,而不是您经常需要的encodeURIComponent。)

因此,要正确地完成它,您将需要另一种方法,要么是您自己的方法,要么是从现有框架中提取的方法(这是一个非常常见的痛点,因此许多库都有解决办法)。可以使用CFURLCreateStringByAddingPercentEscapes来实现。有关示例代码,请参阅this answer。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6888824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档