主要的特殊字符:英文(半角)状态的 单引号 ‘ 双引号" 斜杠 \ 反斜杠 / and符号& 大于号 > 小于号 < 空格
9个特殊符号,可以采取录入的时候进行控制,禁止输入。或者在存入数据库的时候进行转义。或者从数据库取出时候转义。或者在页面进行转义替换等方案。
涉及到:特殊字符可能对 数据库代码 js造成错误。所以要考虑 数据库特殊字符 编写语言特殊字符 html页面特殊字符等。
方案一、存入数据库前对数据进行转义
json串中包含特殊的字符时,可用正则过滤,把特殊的字符改成对应的,存入数据库
value.replace(/\&/g,"&").
replace(/\"/g,""").
replace(/\‘/g,"'").
replace(/\</g,"<").
replace(/\>/g,">")
原文链接: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(">", ">"); theString = theString.Replace("<", "<"); theString = theString.Replace(" ", " "); theString = theString.Replace("\"", """); theString = theString.Replace("\‘", "'"); theString = theString.Replace("\\", "\\\\");//对斜线的转义 theString = theString.Replace("\n", "\\n"); theString = theString.Replace("\r", "\\r");注意:\r是回到行首。\n是新启一行,这两个一般同一时候出现,应该同一时候处理。
补充:文字中间的换行,空格在数据库里面不以\r\n, ;等形式显示出来(“本书”与“前80”之间换行。“由”与“曹雪芹”之间空格)
文字:
数据库:
原文地址:https://www.cnblogs.com/sunny3158/p/11608590.html