URL编码和HTML编码NSStrings

时间:2009-11-03 13:00:39

标签: iphone encoding nsstring urlencode html-entities

他们的方法是编码/解码HTML和URL(在Xcode中,使用Objective-C)?

[NSString stringWithContentsOfFile:<#(NSString *)path#> encoding:<#(NSStringEncoding)enc#> error:<#(NSError **)error#>]

这似乎不符合我的预期。我以为它会转换像“&lt;”这样的特殊字符等效的HTML实体,即“&lt;”在这种情况下。

以下是与此主题相关的w3school链接的参考(一般):

HTML URL Encoding Reference

HTML Entities Reference

满怀期待。

4 个答案:

答案 0 :(得分:19)

使用给定的编码返回接收器的表示,以确定将接收器转换为合法URL字符串所需的转义百分比。

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

返回一个新字符串,该字符串是通过在接收器中将所有百分比转义符替换为由给定编码确定的匹配字符而生成的。

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

答案 1 :(得分:11)

您引用的方法使用给定的字符编码(例如UTF-8或ASCII)从磁盘读取文件。它与URL或HTML转义无关。

如果要添加URL百分比转义,则需要此方法:

[myString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

请务必阅读有关此方法的文档,因为它有一些细微之处,包括它逃脱的内容以及它单独留下的内容。在某些情况下,您可能必须使用更复杂但更灵活的CFURLCreateStringByAddingPercentEscapes()。 (如果您这样做,请注意您可以将CFStringRef投射到NSString *,反之亦然。)

我知道没有内置的XML / HTML样式的实体转义,但是这个函数应该处理基础知识:

NSString * convertToXMLEntities(NSString * myString) {
    NSMutableString * temp = [myString mutableCopy];

    [temp replaceOccurrencesOfString:@"&"
                          withString:@"&amp;"
                             options:0
                               range:NSMakeRange(0, [temp length])];
    [temp replaceOccurrencesOfString:@"<"
                          withString:@"&lt;"
                             options:0
                               range:NSMakeRange(0, [temp length])];
    [temp replaceOccurrencesOfString:@">"
                          withString:@"&gt;"
                             options:0
                               range:NSMakeRange(0, [temp length])];
    [temp replaceOccurrencesOfString:@"\""
                          withString:@"&quot;"
                             options:0
                               range:NSMakeRange(0, [temp length])];
    [temp replaceOccurrencesOfString:@"'"
                          withString:@"&apos;"
                             options:0
                               range:NSMakeRange(0, [temp length])];

    return [temp autorelease];
}

答案 2 :(得分:3)

要进行HTML / XML实体编码,可以使用CFMutableString函数:

NSString *result = .....;
CFStringTransform((CFMutableStringRef)result, NULL, kCFStringTransformToXMLHex, false);

通过将CFStringTransform的最后一个参数设置为true,它也适用于解码(十六进制)实体。

答案 3 :(得分:3)

使用CFStringTransform进行HTML实体编码/解码:

CFStringTransform((CFTypeRef)yourMutableString, NULL, CFSTR("Any-Hex/XML"), FALSE );

您需要使用ICU转换“Any-Hex / XML”。 kCFStringTransformToXMLHex不够激进。