Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone上objective-c格式的HTML实体编码(转换为_Iphone_Objective C_Html Encode - Fatal编程技术网

iPhone上objective-c格式的HTML实体编码(转换为

iPhone上objective-c格式的HTML实体编码(转换为,iphone,objective-c,html-encode,Iphone,Objective C,Html Encode,我正在为iPhone开发一个具有inApp邮件发送功能的应用程序。到目前为止还不错,但现在我想避免html注入,因为邮件的某些部分是用户生成的文本 基本上我搜索的是这样的东西: // inits NSString *sourceString = [NSString stringWithString:@"Hello world! Grüße dich Welt <-- This is in German."]; //

我正在为iPhone开发一个具有inApp邮件发送功能的应用程序。到目前为止还不错,但现在我想避免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);
//初始化

NSString*sourceString=[NSString stringWithString:@“你好,世界!Grüe dich Welt假设电子邮件的字符编码支持Unicode-比如UTF-8-你能不能找到
&
并用
<
>

谢谢@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;
}
//
// _________________________________________
//
//文本到HTML
// _________________________________________
//
-(NSString*)textToHtml:(NSString*)htmlString{
htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@”和“withString:@”和“];
htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@“带字符串:@]”;
htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@''和字符串:@''”;
htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@“'”和字符串:@';”;
htmlString=[htmlString STRING BYREPLACINGOfString:@“\n”带字符串:@“
”; 返回htmlString; }
查看我的。以下是可用的方法:

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;

我一直在寻找一个类似的解决方案,这为我做了工作

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);    
NSString*value=@”;
const void*keys[1]={CFSTR(“somekey”)};
常量void*值[1]={value};
CFDictionaryRef dicRef=CFDictionaryCreate(kCFAllocatorDefault,键,值,1,nil,nil);
CFDataRef dataRef=CFPropertyListCreateData(kCFAllocatorDefault,dicRef,kCFPropertyListXMLFormat_v1_0,0,NULL);
NSString*str=[[NSString alloc]initWithData:(NSData*)dataRef编码:NSUTF8StringEncoding];
NSRange start=[str rangeOfString:@“string>”];

NSRange end=[str rangeOfString:@“对@Markus”代码的一点改进[将
更改为

,转义多个空格]

- (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 = [@"<p>" stringByAppendingString:htmlString];
    htmlString = [htmlString stringByAppendingString:@"</p>"];
    htmlString = [htmlString stringByReplacingOccurrencesOfString:@"\n" withString:@"</p><p>"];
//  htmlString = [htmlString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br />"];
    while ([htmlString rangeOfString:@"  "].length > 0) {
        htmlString = [htmlString stringByReplacingOccurrencesOfString:@"  " withString:@"&nbsp;&nbsp;"];
    }
    return htmlString;
}
-(NSString*)textToHtml:(NSString*)htmlString{
htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@”和“withString:@”和“];
htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@“带字符串:@]”;
htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@''和字符串:@''”;
htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@“'”和字符串:@';”;
htmlString=[@“”stringByAppendingString:htmlString];
htmlString=[htmlString stringByAppendingString:@“

”; htmlString=[htmlString STRING BYREPLACINGOfString:@“\n”带字符串:@“

”; //htmlString=[htmlString STRINGBYREPLACINGOfString:@“\n”带字符串:@“
”]; while([htmlString rangeOfString:@”“。长度>0){ htmlString=[htmlString STRING BYREPLACINGOURCRENCESOFSTRING:@“带字符串:@]”; } 返回htmlString; }
我正在扩展@Markus answer,因为我的情况是我正在发送JSON字符串,所以我需要添加一些转义,这些是我的函数:

注: 来自W3学校的例外参考


谢谢你的回答。基本上你是对的,但由于有一个编码URL的函数(stringByAddingPercentEscapesUsingEncoding),我想知道是否没有类似的HTML字符编码函数。如果我是第一个遇到这种问题的人,我会觉得很奇怪,如果没有“对”的话,我甚至会觉得很奇怪"这样做的方法不是重新发明轮子。不,没有这样的内置功能。您可以按照teabot的建议使用NSScanner进行替换;这里有一种完全剥离HTML标记的方法,您可以修改它:非常感谢您的答案和链接!只需附带说明:既然您也在用
替换,您可以您应该以不同的方式命名您的函数(例如textToHtml)。名称escapeHTML将向其他开发人员表明您只是在进行转义(而不是)如果有人试图重新使用此函数,这将最终导致错误…很好。只是相应地更新了代码段。谢谢!你不是在那里泄漏了一堆NSString吗?等等,不,它们都是自动删除的:这很好,但为什么不直接调用[self stringByReplacing…]在第一行中,如果它不是一个静态方法,您也不需要传入参数来使它与ARC一起工作,请检查这里:只需将标志“-fno objc ARC”添加到NSString类别的编译源代码中。
- (NSString*)convertStringToHTMLEscape:(NSString*)stringContent
{
    stringContent = [stringContent stringByReplacingOccurrencesOfString:@"{" withString:@"%7B"];
    stringContent = [stringContent stringByReplacingOccurrencesOfString:@"}" withString:@"%7D"];
    stringContent = [stringContent stringByReplacingOccurrencesOfString:@"[" withString:@"%5B"];
    stringContent = [stringContent stringByReplacingOccurrencesOfString:@"]" withString:@"%5D"];
    stringContent = [stringContent stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
    stringContent = [stringContent stringByReplacingOccurrencesOfString:@"\"" withString:@"%22"];
    stringContent = [stringContent stringByReplacingOccurrencesOfString:@"\\" withString:@"%5C"];
    stringContent = [stringContent stringByReplacingOccurrencesOfString:@"/" withString:@"%2F"];

    return stringContent;
}