我正在发送一个包含文本、数字和数据的帖子。数字和数据工作正常,但文本有问题,因为它可能包含一个与号(&)。例如
page.php?text=Hello World & Space.现在我发现"&“是由服务器接收的,但读起来就像启动了一个新变量一样。所以它看到(我认为):
text = "Hello World "
Space. =我确实读到过,我可以尝试对文本进行编码,使其看起来像是一个URL (比如“”空格变成了"%20"),但是没有办法正确地对其进行编码。我得出的结论是:
textToPOST = [text stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];但这并不是对与号进行编码,而是对其他所有内容进行编码。所以结果是:
some text ü blablabla变成了
some%20text%20ü%20blablabla使用未编码的&。那么我该怎么做呢,请帮帮忙。
已经非常感谢了
发布于 2011-08-01 04:58:45
感谢你的回答,并为我过早的发帖感到抱歉:我希望它至少能帮助任何和我有同样问题的人。我刚和一个朋友聊天,他告诉我:
要在
中显示和与符号,只需使用&引号。与纯"&“不同,NSXMLParser不会输出错误。使用&还允许您进行其他符号转义,如:
这就是如何解决“我如何解析带有amp的XML问题”的方法。此外,我还设法使代码,从我在评论中链接到我的原始问题的网站,工作:
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个转义,你也可以使用:
NSMutableString *englishEscaped = [NSMutableString stringWithString:[[englishTextLabel string] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];感谢所有人:)
发布于 2011-07-31 18:50:42
不幸的是,stringByAddingPercentEscapesUsingEncoding并不像大多数人所理解的那样是网址编码。它转义URL中完全无效的字符,但不转义URL中具有特殊含义的字符。因此,它可用于“纠正”无效的用户输入的URL,但它非常不适合于从转义路径和查询字符串组件创建URL。
(在JavaScript术语中,它类似于encodeURI,而不是您经常需要的encodeURIComponent。)
因此,要正确地完成它,您将需要另一种方法,要么是您自己的方法,要么是从现有框架中提取的方法(这是一个非常常见的痛点,因此许多库都有解决办法)。可以使用CFURLCreateStringByAddingPercentEscapes来实现。有关示例代码,请参阅this answer。
https://stackoverflow.com/questions/6888824
复制相似问题