12

inApp メール送信機能を備えた 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);

予想される出力
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を作成します'ü' は ü でなければなりません)。

コードサンプルは本当に素晴らしいでしょう(私のものを修正しますか?)...

--
前もってありがとう、
マーカス

4

6 に答える 6

17

HTML の NSString カテゴリをチェックしてください。利用可能な方法は次のとおりです。

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;
于 2010-05-16T11:03:19.047 に答える
1

私は同様の解決策を探していましたが、これでうまくいきました

NSString* value = @"<&>";
const void* keys[1] = {CFSTR("somekey")};
const void* values[1] = {value};    
CFDictionaryRef dicRef =  CFDictionaryCreate(kCFAllocatorDefault, keys, values, 1, nil, nil);    
CFDataRef dataRef = CFPropertyListCreateData(kCFAllocatorDefault, dicRef, kCFPropertyListXMLFormat_v1_0, 0, NULL);    
NSString *str = [[NSString alloc]initWithData:(NSData *)dataRef encoding:NSUTF8StringEncoding];    
NSRange start =[str rangeOfString:@"string>"];
NSRange end =[str rangeOfString:@"</string"];    
NSString *substr = [str substringWithRange:NSMakeRange(start.location+start.length, end.location-(start.location+start.length))];
[str release];
CFRelease(dicRef);
CFRelease(dataRef);    

//部分文字列は HTML エンティティ エンコードになりました

plist ファイルを保存するときに使用される機能の一部を使用しています。これが役立つことを願っています。

于 2011-10-01T08:07:41.650 に答える
0

電子メールの文字エンコーディングが Unicode (UTF-8 など) をサポートしていると仮定すると、<>、およびの出現箇所を見つけ&&lt&gt、および に置き換えることはできません&amp;か?

于 2009-11-03T12:02:18.880 に答える