HTML实体编码(在Objective-c上将iPhone上的'<'转换为'&lt;')

Mar*_*kus 11 iphone html-encode objective-c

我正在开发一个具有inApp-mail发送功能的iPhone应用程序.到目前为止一直很好,但现在我想避免html注入,因为邮件的某些部分是用户生成的文本.

基本上我搜索这样的东西:

// inits
NSString *sourceString = [NSString stringWithString:@"Hello world! Grüße dich Welt <-- This is in German."];

//                                          -----   THAT'S WHAT I'M LOOKING FOR
// pseudo-code                              |
//                                          V
NSString *htmlEncodedString = [sourceString htmlEncode];

// log
NSLog(@"source string: %@", sourceString);
NSLog(@"encoded string: %@", htmlEncodedString);
Run Code Online (Sandbox Code Playgroud)

预期的输出
source string: Hello world! Grüße dich Welt <-- This is in German.
encoded string: Hello world! Gr&#252;&#223;e dich Welt &lt;-- This is in German.

我已经用谷歌搜索并浏览了几个SO的问题和答案,但所有这些似乎与 URL编码有关,而这不是我真正需要的(我试过stringByAddingPercentEscapesUsingEncoding没有运气 - 它创造了%C3%BC 'ü'应该是ü).

一个代码示例真的很棒(纠正我的?)......

-
提前谢谢,
马库斯

Mic*_*all 17

查看我的NSString类别的HTML.以下是可用的方法:

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;
Run Code Online (Sandbox Code Playgroud)


Mar*_*kus 10

谢谢@all.我最终使用了自己的实现:

//
// _________________________________________
//
// textToHtml
// _________________________________________
//
- (NSString*)textToHtml:(NSString*)htmlString {
    htmlString = [htmlString stringByReplacingOccurrencesOfString:@"&"  withString:@"&amp;"];
    htmlString = [htmlString stringByReplacingOccurrencesOfString:@"<"  withString:@"&lt;"];
    htmlString = [htmlString stringByReplacingOccurrencesOfString:@">"  withString:@"&gt;"];
    htmlString = [htmlString stringByReplacingOccurrencesOfString:@"""" withString:@"&quot;"];    
    htmlString = [htmlString stringByReplacingOccurrencesOfString:@"'"  withString:@"&#039;"];
    htmlString = [htmlString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br>"];
    return htmlString;
}
Run Code Online (Sandbox Code Playgroud)

  • 只是一个注意事项:因为你也用<br>替换\n,你应该以不同的方式命名你的函数(例如textToHtml).名称escapeHTML将向其他开发人员表明您正在进行转义(您不是),如果有人试图重新使用此函数,这最终会导致错误... (2认同)