2011-03-26 64 views
2

我从服务器上拉取json数据。它包含一个带有插入到html模板中的文本的字典。如何为UIWebView转义字符串?

我该如何正确地逃避这个字符串?

NSString* json = /* can be anything, but also garbage */ 
NSString* json_escaped = [json someEscapeMethod]; /////// HOW TO ESCAPE THIS ? 
NSString* script = [NSString stringWithFormat:@"process('%@')", json_escaped]; 
NSString* result = [self.webView stringByEvaluatingJavaScriptFromString:script]; 

我目前做的这样,但我不知道羯羊转义足够

NSString* json_escaped = [json stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"]; 

回答

6

我现在用这种方式对它进行编码,但是开销很大。

NSString* json = /* can be anything, but also garbage */ 
NSString* json_escaped = [json stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString* script = [NSString stringWithFormat:@"process('%@')", json_escaped]; 
NSString* result = [self.webView stringByEvaluatingJavaScriptFromString:script]; 

它在JavaScript这样

function process(json_escaped) { 
    var json = decodeURIComponent(json_escaped); 
    alert('json: ' + json.toString()); 
} 

我还在寻找开销更少更好的解决方案进行解码。

更新

我最近发现存在桥接Objective-C的使用javascript几个frameworks

+0

这几乎是正确的。如果您的原始字符串包含单个撇号,则此代码无法正常工作。为了解决这个问题,您需要做的只是更改过程('%@')来处理(“%@”)。单撇号(')没有通过stringByAddingPercentEscapesUsingEncoding进行编码,其中双撇号(“)是。 – 2013-04-14 23:27:32

+0

非常好的方法。 – mattsven 2014-05-12 18:03:28

相关问题