yuechenxing 发表于 2016-10-26 23:17

html存入数据库的另一种选择----json

本帖最后由 yuechenxing 于 2016-10-26 23:25 编辑

最近有个需求1、html转成json对象存入数据库
2、浏览器客户端 将 json对象解码成html标签
3、php端将json对象解成html标签
前两个需求已经有成品的js库实现
下载两个js即可
使用html2json(htmlcontent)和json2html(json);两个函数很好实现
剩下的就是在php端把json数据转成html了html转换成的json如下图

简单分析下,直接贴测试代码吧,没什么好说的
<?php
header("Content-type:text/html;charset=utf-8");
$content = '{"child":[{"node":"element","attr":{"style":"font-size:16px;color:#4B4B4B;"},"child":[{"node":"text","text":"\t\b\t\b\t\b\t\b\t\b\t\b\t\b\t\b觉得压力这个东西是很难说得清的,“有压力”时常听到,但却很难形容那是一种什么样的感受,多数是因为生理上出现什么症状,自己发觉了,究其原因,不是真的身体出现什么大的问题,然后就焕然大悟:应该是压力来了!"}],"tag":"p"},{"node":"text","text":"\n"},{"tag":"img","node":"element","attr":{"src":"http:\/\/7xqbsl.com1.z0.glb.clouddn.com\/FiqYEY5RHYA4fVasneC-ele0d7AD","alt":"","style":"图片也能添加样式"}},{"node":"text","text":"\n"},{"node":"element","attr":{"style":"font-size:16px;color:#4B4B4B;"},"child":[{"node":"text","text":"\t\b\t\b\t\b\t\b\t\b\t\b\t\b\t\b或者每个人压力出现时的反应各不相同,我也说不清楚总共是哪些反应,但却能清楚的知道有一种反应,就是上述说的。这么一种反应让人觉得,生理是最诚实的孩子。心理上,可以自欺欺人、可以自我暗示;表面神态上也能练就:即使心里波涛起伏但表面从容不不迫的神态;但是生理上,种种的人为因素都起不了作用,心里、思绪的变化,甚至是一个想法的不同,都有可能引起不同的生理变化,并且是连自己也左右不了的。"}],"tag":"p"},{"node":"text","text":"\n"},{"tag":"img","node":"element","attr":{"src":"http:\/\/7xqbsl.com1.z0.glb.clouddn.com\/FiSFehueHG8HkymmbBgAYjYSzAXF","alt":"","style":"图片也能添加样式"}},{"node":"text","text":"\n"},{"node":"element","attr":{"style":"font-size:16px;color:#4B4B4B;"},"child":[{"node":"text","text":"\t\b\t\b\t\b\t\b\t\b\t\b\t\b\t\b有压力总是需要释放出来的,毕竟人的承受能力是有限的,有压力是好事,但也要懂得解压减压。压力的原因、来源有无数种,解压的方法也是无数种,如跟他人倾述、做运动、听音乐等。也觉得每个人每件事适合的解压方式也是各不相同的。"}],"tag":"p"},{"node":"text","text":"\n"},{"node":"element","attr":{"style":"font-size:16px;color:#4B4B4B;"},"child":[{"node":"text","text":"\t\b\t\b\t\b\t\b\t\b\t\b\t\b\t\b例如:有人说过内向的人、看起来柔弱需要被保护的人,内心的韧性可能更好,他可能更坚强,抵抗压力的能力可能更好!是不是真是这样,我倒觉得因人因事而异,怎么想和能不能接受别人更好的建议都是很重要的步骤。(感人爱情故事www.wenzhangba.com)"}],"tag":"p"},{"node":"text","text":"\n"},{"node":"element","attr":{"style":"font-size:16px;color:#4B4B4B;"},"child":[{"node":"text","text":"\t\b\t\b\t\b\t\b\t\b\t\b\t\b\t\b他是内向的,很难短时间内就跟人很有话讲,所以其他是孤独的;他也是倔强的,下了决定想去外面闯闯,那么很坚定的信念是:路是自己选的,再怎么没路走也要坚持,没路就自己开辟,路总是人走出来的,所以其实他也是高傲的。因为孤独,知心的,能真心谈天并给予好建议的朋友不多;因为高傲,他不轻易倾诉。这么一种人压力绝不会少,那他是怎么解压的呢?"}],"tag":"p"},{"node":"text","text":"\n"},{"node":"element","attr":{"style":"font-size:16px;color:#4B4B4B;"},"child":[{"node":"text","text":"\t\b\t\b\t\b\t\b\t\b\t\b\t\b\t\b遇到问题产生压力,并不一定非要到了解决问题才是解压。当然,遇到问题,就要探索解决方法,这个过程,应该就是压力滋生顶峰。他压力大的时候会给自己“放假”,给自己一两个小时去做能让自己静下心的事,或睡一觉、或看文章、或下字帖……时间到了,问题依然在,但是呢,感受的压力会是更适合自身的最优程度,心境不一样,平静的心是会调试压力,让人不那么紧绷,也能更好的更准确的思考解决问题的方法。"}],"tag":"p"},{"node":"text","text":"\n"},{"tag":"img","node":"element","attr":{"src":"http:\/\/7xqbsl.com1.z0.glb.clouddn.com\/FuAKPShbb9aWq56_LifMTyPqhz7z","alt":"","style":"图片也能添加样式"}},{"node":"text","text":"\n"},{"tag":"img","node":"element","attr":{"src":"http:\/\/7xqbsl.com1.z0.glb.clouddn.com\/Fic6UaNmrlwTEzIQ6TOrB_hNrhG9","alt":"","style":"图片也能添加样式"}},{"node":"text","text":"\n"},{"node":"element","attr":{"style":"font-size:16px;color:#4B4B4B;"},"child":[{"node":"text","text":"\t\b\t\b\t\b\t\b\t\b\t\b\t\b\t\b每个人对同一件事关注的角度不同,面对的压力程度不同,解压的方式也就千种百样。压力不可怕,解压也不艰难,最重要的是在每次产生压力进行解压这样的循环中,摸索出最适合自己的最优解压方式,战胜压力这座山,相信山顶景色宜人!"}],"tag":"p"},{"node":"text","text":"\n"}],"node":"root"}';
$obj = json_decode($content);
function json2html($json){
      $html = '';
      $text = '';
      if(is_array($json)){
                foreach ($json as $key => $value) {
                        $html.=json2html($value);
                }
                return $html;
      }
      $node = $json->node;
      if($node == 'text'){
                return $json->text;
      }
      if($node == 'element'){
                $attr = '';
                if(isset($json->attr)){
                        foreach ($json->attr as $key => $value) {
                              $attr.=' '.$key.'="'.$value.'"';
                        }
                }
                if(isset($json->child)){
                        $html.= '<'.$json->tag.$attr.'>'.json2html($json->child).'</'.$json->tag.'>';
                }else{
                        $html.= '<'.$json->tag.$attr.'>';
                }
                return $html;
      }
      if($json->node == 'root'){
                return json2html($json->child);
      }


}
echo json2html($obj);

解出的测试代码



沙滩上de水瓶 发表于 2016-10-27 11:34

我刚刚开始看了也觉得可以防止XSS,可是后面仔细一看,如果是管理员在后台操作数据的时候,那个人的信息刚刚好是一个<script>,读出来后仍然是<script>啊,只是在数据库里面的存在不是整单条的<script>语句,好像还是可以进行XSS攻击的,不知道说得对不对,刚刚开始接触到这方面的内容

yuechenxing 发表于 2016-10-26 23:58

白笙 发表于 2016-10-26 23:47
楼主可以谈一下应用场景吗?什么情况下才需要将html转换成json?至少我目前还未遇到过。。(不要见过,纯属学 ...

用json最大的好处是不存在数据库注入和xss。保存到数据库的每一个字符都要严格过滤,不然漏洞好多。向文章这种大段文本更能体现出来,但json不存在这问题。不过我这需求的出发点不太一样,完全是为了app端交互方便。

Tomatoman 发表于 2016-10-26 23:39

学习了,感谢分享~

白笙 发表于 2016-10-26 23:47

楼主可以谈一下应用场景吗?什么情况下才需要将html转换成json?至少我目前还未遇到过。。(不要见过,纯属学生党一名)

dext1231 发表于 2016-10-26 23:56

json本来就可以存任何东西 对象 数据什么都可以的

tmpsforjxp 发表于 2016-10-27 00:04

yuechenxing 发表于 2016-10-26 23:58
用json最大的好处是不存在数据库注入和xss。保存到数据库的每一个字符都要严格过滤,不然漏洞好多。向文 ...

手机端接受json数据,然后存入手机SqlLite?

psx1lin 发表于 2016-10-27 08:07

学习了,研究
感谢分享

guan1021 发表于 2016-10-27 08:16

miaoyu220 发表于 2016-10-27 08:51

感谢分享

onlyMyRailgun 发表于 2016-10-27 09:04

看一下呢,以后可能有用
页: [1] 2
查看完整版本: html存入数据库的另一种选择----json