IOS UIWebView 使用 loadHTMLString 加载 特殊字符编码后的字符 方案解决

IOS UIWebView 使用 loadHTMLString 加载 特殊字符编码后的字符 方案解决

UIWebView 加载内容用三个方法,其中 loadHTMLString 用来加载字符或者文本内容。当内容来自 json 数据时,特殊字符比如“<”、“>”、" “ "、" ” "等会被编码,一段 img HTML标签(<img src="http://pinglun.fx678.com/data/attachment/forum/201511/03/101036dp84jaaca7858ej4.jpg">)会被编码成“&lt;img src='http://pinglun.fx678.com/data/attachment/forum/201511/03/101036dp84jaaca7858ej4.jpg' /&gt;&lt;/align&gt;”,此种情况导致 UIWebView 识别不了 这些 HTML 便签,会被原封不动的输出来。

如下方法可以解决此问题带来的困扰,示例如下:

NSString *strHtml = @"&lt;div align=left&gt;基本面:&lt;/align&gt;&lt;div align=left&gt;周二(11月3日)根据中国外汇交易中心公告,
10月份共有5家境外人民币清算行获批成为人民币银行间外汇市场衍生品会员。&lt;/align&gt;&lt;div align=left&gt;其中包括中国银行澳门分行、
中国银行法兰克福分行、建设银行(伦敦)、工商银行新加坡分行、中国银行(香港)。9月共有3家境外人民币清算行获批,包括中国银行悉尼分行、中国银行巴黎分行、
工商银行卢森堡分行。&lt;/align&gt;&lt;div align=left&gt;根据中国外汇交易中心数据,截至11月2日,中国人民币外汇即期会员共计503家,远期会员113家,
掉期会员112家,期权会员55家。&lt;/align&gt;&lt;div align=left&gt;此前8月底外媒引述知情人士报道称,中国央行(PBOC)决定拓宽人民币购售业务范围,
原来人民币购售仅限于贸易项下,本次新增资本项目下直接投资项业务,办理购售业务的品种从即期拓展至远期和掉期业务。&lt;/align&gt;&lt;div align=left&gt;
瑞银集团(UBS)经济学家David Tinsley周一(11月2日)在报告中称,将英国央行(BOE)加息的时间点推迟至2016年5月,但仅修改行动时间预期,加息幅度预测维持不变。
此前该行曾预计英国央行将在明年年2月加息25个基点。&lt;/align&gt;&lt;div align=left&gt;瑞银表示,当前英国的银行利率为0.50%,2016年底预期为1%,
2017年底为1.75%。&lt;/align&gt;&lt;div align=left&gt;该行指出,做出利率预期修正的原因是外部风险和英国国内增速放缓。
瑞银预计英国2015和2016年GDP增长2.4%,略低于此前预期。&lt;/align&gt;&lt;div align=left&gt;不过,瑞银也强调,
英国央行明年2月加息的可能性并未完全排除,也需要其他数据像周一的PMI一样给人惊喜,体现经济全面向好。&lt;/align&gt;&lt;div align=left&gt;
受益于出口订单反弹,周一公布的英国10月Markit/CIPS制造业采购经理人指数(PMI)从9月份的51.8跳升至55.5,创16个月高位,远高于经济学家的最高预估值52.5。
&lt;/align&gt;&lt;div align=left&gt;技术面:&lt;/align&gt;&lt;div align=left&gt;日线图上,现货白银一根长下影线的阴线。
指标上日线macd绿柱子继续伸长,布林中轨上移,已跌破中轨支撑。KDJ指标J值在20以下超卖区。4小时级别上,布林通道开口打开。Macd黄白线持续下行。
KDJ指标金叉向上发散。整体来看,现货白银短期有技术反弹需要,谨慎操作,不宜追涨杀跌。现货白银支撑位: 3100 3070 阻力位:3180 3210。
&lt;/align&gt;&lt;div align=left&gt;&lt;img src='http://pinglun.fx678.com/data/attachment/forum/201511/03/101036dp84jaaca7858ej4.jpg' 
/&gt;&lt;/align&gt;&lt;div align=left&gt;声明:投资有风险,入市须谨慎!本文仅代表作者个人观点,且仅供参考。本文仅代表作者个人观点且仅供参考,
请自行进行交易决策,做好账户风险管理。&lt;/align&gt;&lt;div align=left&gt;汇创贵金属研发部&lt;/align&gt;&lt;div 
align=left&gt;2015.11.3&lt;/align&gt;&lt;br /&gt;";

strHtml = [NSString stringWithFormat:@"(\"%@\").toString().replace(/</g, \"<\").replace(/>/g, \">\").replace(/'/g, \"'\")
.replace(/ /g, \" \").replace(/&/g, \"&\");",strHtml];

strHtml = [self.webView stringByEvaluatingJavaScriptFromString:strHtml];
[self.webView loadHTMLString:strHtml baseURL:nil];

点击查看 HTML特殊字符编码对照表

javascript 提供了一些方法 来编码(htmlEncode) 和 解码(htmlDecode) HTML 标签,参考代码如下:

<script type="text/javascript">

    //编码
    function htmlEncode(str){
      if (typeof str == "undefined") return "";
       str = str.replace(/&/g, "&");
       str = str.replace(/</g, "<");
       str = str.replace(/>/g, ">");
       str = str.replace(/\"/g, """);
       //str = str.replace(/\'/g, "'"); //IE不支持apos
       str = str.replace(/ /g, " ");
       str = str.replace(/&#([^\;]+);/ig, "&#$1;"); //将井转成相应的汉字“井”
       return str;

    }

    //解码
    function htmlDecode(str){
         if (typeof str == "undefined") return "";
         str = str.replace(/</g, "<");
         str = str.replace(/>/g, ">");
         str = str.replace(/"/g, "\"");
         str = str.replace(/'/g, "'");
         str = str.replace(/ /g, " ");
         str = str.replace(/&/g, "&");
         return str.toString();
    }

  </script>

处理前:

IOS UIWebView 使用 loadHTMLString 加载 特殊字符编码后的字符 方案解决_第1张图片


处理后:

IOS UIWebView 使用 loadHTMLString 加载 特殊字符编码后的字符 方案解决_第2张图片

你可能感兴趣的:(UIWebView,编码,图片,HtmlEncode,htmlDecode)