当前位置: 首页 > news >正文

关于数据库存储【\】转义字符反斜杠丢失的问题

背景

开始的时候,发现一个很奇怪的现象

富文本编辑器,前端存储带有"的内容,回显的时候解析就会出问题

后来发现,其实是只要是需要带有\进行转义的内容就会有问题

排查

从前端提交数据,后端获取数据,到数据库存储数据,再从数据库查询返回给前端这个过程

PS:我这里的内容因为是一个动态表单,所以是一个数组,里面有一个富文本,我省略了一些无关的数据

  1. 富文本的字段内容为: "<p> <a href=\"2\" target=\"_blank\">12</a> </p>"
  2. 把动态表单arr进行JSON.stringify进行json一遍,结果为<p> <a href=\\"2\\" target=\\"_blank\\">12</a> </p>
  3. 然后前端进行post提交的时候,作为body本身又会被json一次
  4. 但是到了后端,本身又会被parse一次,所以这两次相互抵消
  5. 然后会把<p> <a href=\"2\" target=\"_blank\">12</a> </p>这个存入数据库,这里看起来和我们预期是一样的
  6. 然后关键的来了,存储到数据库之后变成了<p> <a href="2" target="_blank">12</a> </p>,也就是这里丢失了转义
  7. 导致查询返回给前端的时候,变成了<p> <a href=\"2\" target=\"_blank\">12</a> </p>,这里进行parse解析的时候报错了
    我这里贴一下完整的测试数据
    let a = [{id: 28,name: "",logo: "",arr: '[{"text":"","content":"<p> <a href="2" target="_blank">12</a> </p>"}]',create_time: "2024-06-14 11:05:23",},
    ];
    JSON.parse(a[0].arr);
    

解决方案

开始的时候本想通过mysql或者express之类的配置解决这个问题,但是没有找到解决方案

最后用一个比较丑陋的方式解决的:就是在存入数据库之前用替换的方式手动增加一个\,这样的话相当于没丢

const realSql = insertSql.replace(/\\/g, "\\\\");

如果有大佬有更好的方案欢迎留言

http://www.lryc.cn/news/372909.html

相关文章:

  • Unity3D 如何做好版本控制
  • 移动端消息中心,你未必会设计,发一些示例出来看看。
  • Non-zero exit code pycharm
  • 西门子学习笔记12 - BYTE-REAL互相转化
  • 科技云报道:“元年”之后,生成式AI将走向何方?
  • DAY02 HTML
  • 【Windchill监听器、队列、排程】
  • 统计信号处理基础 习题解答10-14
  • APP各种抓包教程
  • web前端开发项目教学:深入剖析四大核心、五大技能、六大实战、七大建议
  • 从入门到高手的99个python案例(2)
  • btstack协议栈实战篇--Performance - Stream Data over SPP (Server)
  • ThinkPHP5.0 apache服务器配置URL重写,index.php去除
  • 《TCP/IP网络编程》(第十五章)套接字和标准I/O
  • 认识一些分布函数-Gumbel分布
  • C语言之void类型的本质
  • Wall国内开源程序照片墙,支持VR全景及安装教程
  • 七个备受欢迎的IntelliJ IDEA实用插件
  • HDFS架构
  • 【机器学习】LightGBM: 优化机器学习的高效梯度提升决策树
  • 【会议征稿,IEEE出版】第六届物联网、自动化和人工智能国际学术会议(IoTAAI 2024,7月26-28)
  • Flask-Logging
  • go匿名函数
  • ZED双目相机环境配置
  • 【最新鸿蒙应开发】——HarmonyOS沙箱目录
  • SringBoot 如何使用HTTPS请求及Nginx配置Https
  • 14.基于人类反馈的强化学习(RLHF)技术详解
  • Linux Radix tree简介
  • maven 下载jar包加载顺序
  • 新增多种图表类型,新增视频、流媒体、跑马灯组件,DataEase开源数据可视化分析工具v2.7.0发布