9

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

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

这似乎不像我预期的那样工作。我认为它会将特殊字符(如“<”)转换为等效的 HTML 实体,即在这种情况下为“<”。

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

HTML URL 编码参考

HTML 实体参考

期待中的感谢。

4

4 回答 4

19

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

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

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

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
于 2009-11-03T14:21:39.567 回答
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];
}
于 2009-11-03T15:48:24.603 回答
3

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

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

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

于 2010-09-28T21:03:07.040 回答
3

用于CFStringTransformHTML 实体编码/解码:

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

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

于 2011-12-22T01:24:18.153 回答