滴答软件

  • 首页
  • 技术服务
  • 服务案例
  • 技术博客
    • 全部分类
    • 软件开发
    • 微信小程序
    • ERP开发
  • 项目询价

【苏州软件开发】php处理json值中的双引号

2019年1月8日admin

苏州软件开发根据最近的项目经历总结出处理json值中的双引号问题。

我们都只json是键值对存储的,php在解析json字符串时直接使用自带的函数json_decode($jsonString)即可实现,解析后的是json对象,非常简单;如果要转成数组也很简单,多加个参数,json_decode($jsonString,true).

最近在项目中遇到个json解析的问题,就是json的value (值)含有双引号,因为值的内容是html代码,按照正常的处理逻辑,双引号在转成json字符串时要进行转义,这样解析的时候就不会有问题,但是实际上却没有进行转义,从而导致json无法解析。因为这是一个接口,我们无法预知内容的多少,所以必须要彻底解决。问题json 代码如下:

{...
"detail":"<img align="absmiddle" src="https://img.demo.com/xxx/i1/3252495915/O1CN019CuEk71tZ7DJ0QcF6_!!3252495915.jpg"><img src="https://img.demo.com/xxx/i1/3252495915/O1CN01T7WRWm1tZ7DUVCMd4_!!3252495915.jpg" align="absmiddle">",
"count":"876",
...}

可以看到,键 “detail”对应的值双引号内还有双引号,现在需要把值内的双引号进行转义。

也曾百度解决办法,但是大都千篇一律,有的说用addslashes(),但是会破坏json格式,无法解决,也有的说用js处理,但是都已没有真正的解决方法,所以只能自己想办法解决。

首先想到的是通过正则表达式进行处理,但是如何只把上面的“detail”的value部分找出,然后把其中内嵌的双引号进行替换转义,想了很多、也尝试写了很多正则表达式去处理,但是都不理想;最后想出了个方案,还是通过正则,但是采用多个正则进行配合的方式,逻辑如下:

1.全局正则替换双引号,进行转义为\”;

2.全局正则替换起始的双引号;

3.全局正则替换key和value之间的双引号;

4.全局正则替换key和value的双引号,value是数组;

5.全局正则替换key和value的双引号,value是键值对;

6.全局正则替换单行结尾的引号和逗号;

7.替换单行结尾的引号;

通过以上7步即可实现value中双引号转义,而不破坏json格式,json可以正常解析,此方法经多次测试,完全没有问题,具体代码如下:

function escapeDoubleQuote($data){
    $data = preg_replace('/\"/','\\\\"', $data);            //所有的双引号进行转义
    $data = preg_replace('/\s\\\"/','"', $data);            //替换起始的双引号
    $data = preg_replace('/\\\":\\\"/','":"', $data);       //替换key和value之间的双引号
    $data = preg_replace('/\\\":\[/','":[', $data);         //替换key和value的双引号,value是数组
    $data = preg_replace('/\\\":\{/','":{', $data);         //替换key和value的双引号,value是键值对
    $data = preg_replace('/\\\",/','",', $data);            //替换单行结尾的引号和逗号
    $data = preg_replace("/\\\\\"\s*\n/","\"\n", $data);    //替换单行结尾的引号
    $data = json_decode($data,true);
    return $data;
}

为了解决这个问题,花了我们不少时间去思考,才想出这个解决方案,为了帮助有需要的人,现在分享给大家,欢迎转载让更多人知道。

此文为技术人员原创,如需转载请注明出处:苏州滴答软件科技–技术博客, 出处网址:https://www.didasoft.cn/2019/01/08/phpchulijsonzhizhongdeshuangyinhaoyinhao/

标签: 苏州软件开发公司
上一篇 【苏州小程序开发】寒假班怎么招生?
下一篇 【苏州小程序开发】小病自医小程序核心使用人群

近期文章

  • 化妆品企业如何使用ERP系统提升企业利润
  • 公司的信息化系统对公司业务有哪些帮助
  • 软件项目开发的流程有哪些
  • 如何选择专业的软件开发公司
  • 如何设计一款符合公司业务的CRM系统

分类目录

  • ERP定制开发 (73)
  • Social Marketing (1)
  • Web Design (1)
  • 公司产品 (9)
  • 婚纱摄影小程序 (2)
  • 小程序开发公司 (30)
  • 微信公众号 (12)
  • 微信小程序 (161)
  • 技术分享 (11)
  • 民宿小程序 (1)
  • 热点资讯 (9)
  • 网站开发 (3)
  • 苏州ERP开发 (44)
  • 苏州ERP开发公司 (66)
  • 苏州软件外包企业 (97)
  • 苏州软件定制开发 (103)
  • 苏州软件开发公司 (98)
  • 行业新闻 (4)
  • 软件开发 (200)
  • 默认分类 (27)

文章归档

  • 2023年十二月 (1)
  • 2023年七月 (9)
  • 2023年六月 (9)
  • 2023年五月 (40)
  • 2023年四月 (30)
  • 2023年三月 (26)
  • 2023年二月 (13)
  • 2021年九月 (2)
  • 2021年八月 (4)
  • 2021年七月 (2)
  • 2020年十月 (1)
  • 2020年七月 (1)
  • 2020年六月 (1)
  • 2020年三月 (2)
  • 2019年十二月 (1)
  • 2019年十一月 (2)
  • 2019年十月 (10)
  • 2019年九月 (1)
  • 2019年八月 (23)
  • 2019年七月 (33)
  • 2019年六月 (24)
  • 2019年五月 (32)
  • 2019年四月 (19)
  • 2019年三月 (42)
  • 2019年二月 (29)
  • 2019年一月 (39)
  • 2018年十二月 (2)
  • 2018年十一月 (9)
  • 2018年十月 (3)
  • 2018年九月 (24)
  • 2018年八月 (8)
  • 2018年六月 (5)
  • 2018年五月 (3)
  • 2018年三月 (2)
  • 2018年一月 (3)
  • 2017年十二月 (5)
  • 2017年九月 (1)
  • 2016年四月 (1)

联系我们

联系邮箱:yzhu@didasoft.cn
服务热线:0512-65693880
服务热线:+86 155-0167-7862 (周一至周日)
公司地址: 苏州工业园区东平街299号欧瑞大厦320
工作时间: 09:00 - 18:00 ( 周一至周五 )

友情链接

苏州PHP开发
苏州APP开发
微信小程序开发
苏州软件开发公司
小程序制作开发

专业 高效 诚信 价值

滴答软件
  • 首页
  • 技术博客
  • 项目询价
  • FAQ问答
版权所有 © 2020 苏州滴答软件科技有限公司 苏ICP备16017844号

苏公网安备 32059002004131号