解决JSON包含HTML标签无法显示的问题

摘要:
它主要用于转义json函数dotran($str){$str=str_replace('“','//”',$str);$str=str_replace(“/r/n”,'//r/n',$sstr);$str=str_replace(“/t”,'//t',$str');$sstr=str_relace(“//”,'

主要是将json无法识别的字符进行转义    

function dotran($str) {
        $str = str_replace('"','//"',$str);
        $str = str_replace("/r/n",'//r//n',$str);
        $str = str_replace("/t",'//t',$str);
        $str = str_replace("//",'//',$str);
        $str = str_replace("/b",'//b',$str);
        return $str;
    }
这样返回的数据就可以正常显示,下面是转换后的内容:
jsontext='{"jqry":[{"id":"121","userid":"0","status":"1","filename":"","url":"333333333","title":"aaaaaaa","type":"WatchTV","seq":"1","remark":"remarktext","content":"<p>//r//n//t<object classid=//"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000//" codebase=//"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0//"><param name=//"quality//" value=//"high//" /><param name=//"movie//" value=//"http://www.xxx.com/vod/COD4_Ep1.swf//" /><embed pluginspage=//"http://www.macromedia.com/go/getflashplayer//" quality=//"high//" src=//"http://www.xxx.com/vod/COD4_Ep1.swf//" type=//"application/x-shockwave-flash//"></embed></object></p>//r//n"}]}';



HTML转换函数
public string ChangeString(string str)
{
//str含有HTML标签的文本
str = str.Replace("<","&lt;");
str = str.Replace(">","&gt;");
str = str.Replace(" ","&nbsp;");
str = str.Replace(" ","<br>");
str = str.Replace("&","&amp;");
return str;
}
=======================

js字符过滤html标签互转函数
function htmlencode(str) {
 str = str.replace(/&/g, '&amp;');
 str = str.replace(/</g, '&lt;');
 str = str.replace(/>/g, '&gt;');
 str = str.replace(/(?:t| |v|r)*n/g, '<br />');
 str = str.replace(/  /g, '&nbsp; ');
 str = str.replace(/t/g, '&nbsp; &nbsp; ');
 str = str.replace(/x22/g, '&quot;');
 str = str.replace(/x27/g, '&#39;');
 return str;
}

function htmldecode(str) {
 str = str.replace(/&amp;/gi, '&');
 str = str.replace(/&nbsp;/gi, ' ');
 str = str.replace(/&quot;/gi, '"');
 str = str.replace(/&#39;/g, "'");
 str = str.replace(/&lt;/gi, '<');
 str = str.replace(/&gt;/gi, '>');
 str = str.replace(/<br[^>]*>(?:(rn)|r|n)?/gi, 'n');
 return str;
}

function textencode(str) {
 str = str.replace(/&amp;/gi, '&');
 str = str.replace(/</g, '&lt;');
 str = str.replace(/>/g, '&gt;');
 return str;
}

function textdecode(str) {
 str = str.replace(/&amp;/gi, '&');
 str = str.replace(/&lt;/gi, '<');
 str = str.replace(/&gt;/gi, '>');
 return str;
}


实例1

RT: 
返回的Json数据如下、带Html标签就无法显示了、 

{"articleList": [{"articleId":6,"title":"拜拜拜拜 吧","author":"superman","content":"BBBBBBBBBBBB","hits":"0"}, {"articleId":7,"title":"333","author":"superman","content":"333333333333333333333333333333333333","hits":"0"}, {"articleId":1,"title":"阿萨 德","author":"heshan","content":"test","hits":"0"}, {"articleId":2,"title":"阿萨德","author":"superman","content":"123<img src="http://localhost:8080/jpkc/admin/kindeditor/plugins/emoticons/0.gif" alt="" border="0" /><br />","hits":"0"},{"articleId":3,"title":"TEST1","author":"superman","content":"TEST1<br />","hits":"0"},{"articleId":4,"title":"测 试","author":"superman","content":"测试功能!!!!","hits":"0"}, {"articleId":5,"title":"test!","author":"superman","content":"KE.util.setFullHtml('content', '');","hits":"0"},]}

解决办法:
"content":"123<img src="http://localhost:8080/jpkc/admin/kindeditor/plugins/emoticons/0.gif" alt="" border="0"/><br/>"
改为
"content":"123<img src='http://localhost:8080/jpkc/admin/kindeditor/plugins/emoticons/0.gif' alt='' border='0' /><br/>"

js方法:str.replaceAll(""","'");

实例2:

从服务器端以JSON格式将数据传递到客户端后,通过JS显示在HTML页面时,有一些特殊字符不能直接显示,如后台传递过来的是 '<b>msg</b> #' 通过JS显示在HTML页面中时,显示成了 msg # ,并不是msg #,这是由于<与>之间的内容看作是HTML标签了,而以&开头的 与#为HTML实体,所以显示不正常。

解决办法很简单,在JS将其渲染到HTML页面前转换一下即可:

01<script type="text/javascript">  
02var str = '<b>msg</b> #';  
03document.all.div1.innerHTML='<pre>'+str+'</pre>';  
04   
05//js中的字符串正常显示在HTML页面中  
06String.prototype.displayHtml= function(){  
07    //将字符串转换成数组  
08    var strArr = this.split('');  
09    //HTML页面特殊字符显示,空格本质不是,但多个空格时浏览器默认只显示一个,所以替换  
10    var htmlChar="&<>";  
11    for(var i = 0; i< str.length;i++){  
12        //查找是否含有特殊的HTML字符  
13        if(htmlChar.indexOf(str.charAt(i)) !=-1){  
14            //如果存在,则将它们转换成对应的HTML实体  
15            switch (str.charAt(i)) {                          
16                case '<':  
17                    strArr.splice(i,1,'<');  
18                    break;  
19                case '>':  
20                    strArr.splice(i,1,'>');  
21                    break;  
22                case '&':  
23                    strArr.splice(i,1,'&');  
24            }  
25        }  
26    }  
27    return strArr.join('');  
28}  
29alert(str.displayHtml());  
30document.all.div2.innerHTML=str.displayHtml();  
31</script> 
 
 

免责声明:文章转载自《解决JSON包含HTML标签无法显示的问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决 'adb root' 时提示 'adbd cannot run as root in production builds'页面元素添加提示(tooltip)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

封装hiredis——C++与redis对接(一)(string的SET与GET操作)

  在菜鸟教程自学了redis,总想着像Mysql一样,在C/C++中进行对接。于是查询了一些资料,最后找到了hiredis。然而直接用它的话,难免有点不方便。于是,对其进行封装。   hiredis直接去git上克隆,地址:https://github.com/redis/hiredis。   下载好之后,由于其自带Makefile,只要make一下就编...

5.移动渗透测试工具之drozer

本篇博文主要来介绍drozer在移动渗透中的作用 本次实验环境所用工具为:夜神模拟器,drozer-2.3.4,sieve.apk,adb drozer安装这里不再多嘴,给出链接:https://www.cnblogs.com/JDragons/p/5596258.html adb作为移动与pc的调试桥,我这里也已经安装完成。 1.安装agent.apk...

MySQL入门笔记(二)

MySQL的数据类型、数据库操作、针对单表的操作以及简单的记录操作可参考:MySQL入门笔记(一) 五、子查询   子查询可简单地理解为查询中的查询,即子查询外部必然还有一层查询,并且这里的查询并非仅仅指SELECT的查询操作,而是包括INSERT、DELETE、SET等操作在内的所有操作。 1. 使用比较运算符的子查询 operand comparis...

MySQL中使用replace into语句批量更新表数据

作为示例,我们在这里使用名为testdb的数据库,并且在其中创建两张一模一样的表: drop table if exists test_table_1; create table test_table_1 ( name varchar(30) primary key, age integer ); drop table if exists...

Uboot--Linux参数传递--ATAG【转】

转自:https://blog.csdn.net/gx19862005/article/details/28596539 Linux内核源码分析--内核启动命令行的传递过程(Linux-3.0 ARMv7) Linux内核在启动的时候需要一些参数,以获得当前硬件的信息或者启动所需资源在内存中的位置等等。这些信息可以通过bootloader传递给内核,比较常...

uniapp打包h5页面ios唤起软键盘踩坑

问题:页面有很多input框,上面的input输入框,当虚拟键盘出来时没问题,但是下面的input输入框,就会出现问题,input输入框会跑到键盘后面。 网上一阵百度,找到原因:安卓手机中唤起软键盘时页面会压缩webview的高度,窗口会执行resize事件,但ios并不会。网上各种百度,尝试,都失败了,在快放弃时,找到一个可行的。直接贴代码: 1...