json里有特殊字符如何处理

2025-10-23 01:19:07

1、1. 回车问题

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、2. HTML特殊字符

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

解决办法很简单,在JS将其渲染到HTML页面前转换一下即可:

01<script type="text/javascript"> 

02var str = '<b>msg</b> #'; 

03document.all.div1.innerHTML='<pre>'+str+'</pre>'; 

04 

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

06String.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} 

29alert(str.displayHtml()); 

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

31</script> 

3、3. escape()函数

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

1var url = "nowamagic.php?people=" + escape(people.toJSONString());

2request.open("GET", url, true);

3request.onreadystatechange = updatePage;

4request.send(null);

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

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

4、4. 引号问题

JSON中如果包含引号或双引号,会破坏JSON的格式。有两种方法可以解决。

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

1$text = addslashes($text);

JavaScript的话,可以这样:

1function valueReplace(v){

2v=v.toString().replace(new RegExp('(["\"])', 'g'),"\\\"");

3    return v;

4}

5var eValue = encodeURI($.trim(valueReplace(e.value)))

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢