sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1793 随笔 :: 22 文章 :: 24 评论 :: 225万 阅读
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

主要的特殊字符:英文(半角)状态的 单引号 ‘ 双引号"  斜杠 \  反斜杠 /  and符号&   大于号 >  小于号 <   空格 

9个特殊符号,可以采取录入的时候进行控制,禁止输入。或者在存入数据库的时候进行转义。或者从数据库取出时候转义。或者在页面进行转义替换等方案。

涉及到:特殊字符可能对  数据库代码 js造成错误。所以要考虑 数据库特殊字符     编写语言特殊字符   html页面特殊字符等。

方案一、存入数据库前对数据进行转义  

json串中包含特殊的字符时,可用正则过滤,把特殊的字符改成对应的,存入数据库

value.replace(/\&/g,"&amp;").

replace(/\"/g,"&quot;").

replace(/\'/g,"&#39;").

replace(/\</g,"&lt;").

replace(/\>/g,"&gt;")

原文链接:https://blog.csdn.net/liushuiziyouliu/article/details/76348830

方案二 从数据库中取出json返回前台之前转化: 

注意:对单引号这个方法不适用,单引号只能存数据库之前进行转义

public static String stringToJson(String s) {    
          StringBuffer sb = new StringBuffer ();     
          for (int i=0; i<s.length(); i++) {     
        
              char c = s.charAt(i);     
              switch (c) {     
              case '\"':     
                  sb.append("\\\"");     
                  break;     
//              case '\\':   //如果不处理单引号,可以释放此段代码,若结合下面的方法处理单引号就必须注释掉该段代码
//                  sb.append("\\\\");     
//                  break;     
              case '/':     
                  sb.append("\\/");     
                  break;     
              case '\b':      //退格
                  sb.append("\\b");     
                  break;     
              case '\f':      //走纸换页
                  sb.append("\\f");     
                  break;     
              case '\n':     
                  sb.append("\\n"); //换行    
                  break;     
              case '\r':      //回车
                  sb.append("\\r");     
                  break;     
              case '\t':      //横向跳格
                  sb.append("\\t");     
                  break;     
              default:     
                  sb.append(c);    
              }}
          return sb.toString();     
       }
java 单引号保存数据库之前进行单独的处理之后在保存数据库:

public static String StringDanYinToJSON(String ors) {
           ors = ors == null ? "" : ors;
           StringBuffer buffer = new StringBuffer(ors);
           int i = 0;
           while (i < buffer.length()) {
            if (buffer.charAt(i) == '\'' || buffer.charAt(i) == '\\') {
             buffer.insert(i, '\\');
             i += 2;
            } else {
             i++;
            }
          }
           return buffer.toString();
     }

 

方案三  js解决办法  使用JSON.parse()前  把特殊字符串进行替换

 

 

方案四、从数据库取出后处理

在对数据库取出来的数据(特别是描写叙述信息)里面含有特殊字符的话。使用JSON.parse将json字符串转换成json对象的时候会出错,主要是双引號,回车换行等影响明显,左尖括号和右尖括号也会导致显示问题,所以要在输出到页面进行json对象转换之前将一些特殊符合进行编码或转义,以下展示的是C#代码编码和转义几个经常使用特殊字符。经过笔者測试,将这些符号编码和转义之后,大部分json字符串都能够转换成json对象了。假设遇到个别问题,应朝着这个方向去查找问题。

            theString = theString.Replace(">", "&gt;");
            theString = theString.Replace("<", "&lt;");
            theString = theString.Replace(" ", "&nbsp;");
            theString = theString.Replace("\"", "&quot;");
            theString = theString.Replace("\'", "&#39;");
            theString = theString.Replace("\\", "\\\\");//对斜线的转义
            theString = theString.Replace("\n", "\\n");
            theString = theString.Replace("\r", "\\r");
注意:\r是回到行首。\n是新启一行,这两个一般同一时候出现,应该同一时候处理。

 

 

补充:文字中间的换行,空格在数据库里面不以\r\n,&nbsp;;等形式显示出来(“本书”与“前80”之间换行。“由”与“曹雪芹”之间空格)

文字:

 

 

 

数据库:

 

posted on   sunny123456  阅读(21749)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
点击右上角即可分享
微信分享提示