Json数据中有冒号以及其它特殊字符序列化总结

.Net技术 针尖舞 9年前 (2015-09-27) 6846次浏览 0个评论

JSON 是适用于 Ajax 应用程序的一种有效格式,原因是它使 JavaScript 对象和字符串值之间得以快速转换。但是Json数据中有冒号以及其它特殊字符时序列化解析就会报错,处理办法如下:

 
  错误数据格式如下  {test:2011-11-10 00:00:00,name:test\]]\]\]\asfasdfasdf,age:28}   

 
比较好的解决办法是将字符串中的key和value都加上””来包含  如下 

 
 {“test”:”2011-11-10 00:00:00″,”name”:”test\]]\]\]\asfasdfasdf”,”age”:”28″}  

 
 在程序中需要将”进行转义  如下 

 
 {“test”:”2011-11-10 00:00:00″,”name”:”test\]]\]\]\asfasdfasdf”,”age”:”28″}  

 
 这样更改以后再解析就可以通过啦。

 
JSON特殊字符处理总结:

 

1. JSON 回车符

 

JSON传值的时候,如果有回车符就会挂的。可以使用正则来去掉回车符:

 

 
1 $str = preg_replace(“”([\r\n])[\s]+””,””,$str);
2  
3 // 不用正则
4 $str =str_replace(“\n”,””,$str);

 

转出来的字符串就没有回车符了。

 

PHP过滤脚本:

 

 
01 <?php
02 // $document 应包含一个 HTML 文档。
03 // 本例将去掉 HTML 标记,javascript 代码
04 // 和空白字符。还会将一些通用的
05 // HTML 实体转换成相应的文本。
06  
07 $search =array (“”<script[^>]*?>.*?</script>”si”, // 去掉 javascript
08                 “”<[\/\!]*?[^<>]*?>”si”,          // 去掉 HTML 标记
09                 “”([\r\n])[\s]+””,                // 去掉空白字符
10                 “”&(quot|#34);”i”,                // 替换 HTML 实体
11                 “”&(amp|#38);”i”,
12                 “”&(lt|#60);”i”,
13                 “”&(gt|#62);”i”,
14                 “”&(nbsp|#160);”i”,
15                 “”&(iexcl|#161);”i”,
16                 “”&(cent|#162);”i”,
17                 “”&(pound|#163);”i”,
18                 “”&(copy|#169);”i”,
19                 “”&#(\d+);”e”);                   // 作为 PHP 代码运行
20  
21 $replace =array (“”,
22                  “”,
23                  “\1”,
24                  “””,
25                  “&”,
26                  “<“,
27                  “>”,
28                  ” “,
29                  chr(161),
30                  chr(162),
31                  chr(163),
32                  chr(169),
33                  “chr(\1)”);
34  
35 $text = preg_replace ($search,$replace,$document);
36 ?>

 

2. JSON HTML特殊字符

 

从服务器端以JSON格式将数据传递到客户端后,通过JS显示在HTML页面时,有一些特殊字符不能直接显示,如后台传递过来的是 “<b>msg</b> #” 通过JS显示在HTML页面中时,显示成了 msg # ,并不是msg #,这是由于<与>之间的内容看作是HTML标签了,而以&开头的 与#为HTML实体,所以显示不正常。

 

解决办法:在JS将其渲染到HTML页面前转换一下:

 

 
01 <script type=”text/javascript”> 
02 var str =”<b>msg</b> #”; 
03 document.all.div1.innerHTML=”<pre>”+str+”</pre>”; 
04  
05 //js中的字符串正常显示在HTML页面中 
06 String.prototype.displayHtml=function(){ 
07    //将字符串转换成数组 
08    var strArr =this.split(“”); 
09    //HTML页面特殊字符显示,空格本质不是,但多个空格时浏览器默认只显示一个,所以替换 
10    var htmlChar=”&<>”; 
11    for(var i = 0; i< str.length;i++){ 
12        //查找是否含有特殊的HTML字符 
13        if(htmlChar.indexOf(str.charAt(i)) !=-1){ 
14            //如果存在,则将它们转换成对应的HTML实体 
15            switch (str.charAt(i)) {                         
16                case “<“: 
17                    strArr.splice(i,1,”<“); 
18                    break; 
19                case “>”: 
20                    strArr.splice(i,1,”>”); 
21                    break; 
22                case “&”: 
23                    strArr.splice(i,1,”&”); 
24            } 
25        } 
26    } 
27    return strArr.join(“”); 
28
29 alert(str.displayHtml()); 
30 document.all.div2.innerHTML=str.displayHtml(); 
31 </script> 

 

3. escape()函数

 

该函数可以处理空格、斜线和其他任何可能影响浏览器的内容,并将它们转换成 Web 可用字符(比如,空格会被转换成 %20,浏览器并不会将其视为空格处理,而是不做更改,将其直接传递到服务器)。之后,服务器会(通常自动)再把它们转换回它们传输后的本来 “面目”。

 

 
1 var url =”nowamagic.php?people=” + escape(people.toJSONString());
2 request.open(“GET”, url,true);
3 request.onreadystatechange = updatePage;
4 request.send(null);

 

这种做法有两个缺点: 在使用 GET 请求发送大块数据时,对 URL 字符串有长度限制。虽然这个限制很宽泛,但对象的 JSON 字符串表示的长度可能超出您的想象,尤其是在使用极其复杂的对象时更是如此。在跨网络以纯文本发送所有数据的时候,发送数据面临的不安全性超出了您的处理能力。

 

简言之,以上是 GET 请求的两个限制,而不是简单的两个与 JSON 数据相关的事情。在想要发送用户名和姓之外的更多内容,比如表单中的选择时,二者可能会需要多加注意。若要处理任何机密或极长的内容,可以使用 POST 请求。

 

4. JSON 引号或双引号

 

JSON中如果包含引号或双引号,会破坏JSON的格式。解决方法:

 

在入库的时候可以使用addslashes()函数处理一下字符串,给引号前加上斜杠。被改的字符包括单引号 (“)、双引号 (“)、反斜线 backslash (\) 以及空字符NULL。

 

 
1 $text =addslashes($text);

 

JavaScript的话,可以这样:

 

 
1 function valueReplace(v){
2 v=v.toString().replace(new RegExp(“([“”])”,”g”),”\””);
3    return v;
4 }
5 var eValue = encodeURI($.trim(valueReplace(e.value)))

 

 


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Json数据中有冒号以及其它特殊字符序列化总结
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!