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

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″}

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

1. JSON 回车符

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

1

$str= preg_replace(“”([\r\n])[\s]+””,””,$str);

2

3

// 不用正则

4

$str=str_replace(“\n”,””,$str);

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

PHP过滤脚本:

01

02

// $document 应包含一个 HTML 文档。

03

// 本例将去掉 HTML 标记,javascript 代码

04

// 和空白字符。还会将一些通用的

05

// HTML 实体转换成相应的文本。

06

07

$search=array(“””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

?>

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

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

01

02

varstr =”msg #”;

03

document.all.div1.innerHTML=”

”+str+”
”;

04

05

//js中的字符串正常显示在HTML页面中

06

String.prototype.displayHtml=function(){

07

//将字符串转换成数组

08

varstrArr =this.split(“”);

09

//HTML页面特殊字符显示,空格本质不是,但多个空格时浏览器默认只显示一个,所以替换

10

varhtmlChar=”&<>”;

11

for(vari = 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

returnstrArr.join(“”);

28

}

29

alert(str.displayHtml());

30

document.all.div2.innerHTML=str.displayHtml();

31

3. escape()函数

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

1

varurl =”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

functionvalueReplace(v){

2

v=v.toString().replace(newRegExp(“([“”])”,”g”),”\””);

3

returnv;

4

}

5

vareValue = encodeURI($.trim(valueReplace(e.value)))

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Json数据中有冒号以及其它特殊字符序列化总结!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值