如何处理JSON中的特殊字符

这篇文章主要介绍了如何处理JSON中的特殊字符,小编以为挺不错的,如今分享给你们,也给你们作个参考。一块儿跟随小编过来看看吧javascript

JSON 是适用于 Ajax 应用程序的一种有效格式,缘由是它使 JavaScript 对象和字符串值之间得以快速转换。因为 Ajax 应用程序很是适合将纯文本发送给服务器端程序并对应地接收纯文本,相比不能生成文本的 API,能生成文本的 API 天然更可取;并且,JSON 让您可以处理本地 JavaScript 对象,而无需为如何表示这些对象多费心思。php

XML 也能够提供文本方面的相似益处,但用于将 JavaScript 对象转换成 XML 的几个现有 API 没有 JSON API 成熟;有时,您必须在建立和处理 JavaScript 对象时格外谨慎以确保所进行的处理能与所选用的 XML 会话 API 协做。但对于 JSON,状况就大不相同:它能处理几乎全部可能的对象类型,并会返回给您一个很是好的 JSON 数据表示。 所以,JSON 的最大价值在于能够将 JavaScript 真的做为 JavaScript 而非数据格式语言进行处理。html

您所学到的全部有关使用 JavaScript 对象的技巧均可以应用到代码中,而无需为如何将这些对象转变成文本而多费心思。java

1. 回车问题数组

JSON传值的时候,若是有回车符就会挂的。咱们可使用正则来去掉回车符:浏览器

?安全

1服务器

2网络

3函数

4

5

$str = preg_replace("'([\r\n])[\s]+'", "", $str);

 

 // 不用正则

 

 $str = str_replace("\n","",$str);

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

顺便记录一个PHP过滤脚本:

?

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

<?php

 

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

 

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

 

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

 

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

 

 $search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 javascript

 

         "'<[\/\!]*?[^<>]*?>'si",      // 去掉 HTML 标记

 

         "'([\r\n])[\s]+'",         // 去掉空白字符

 

         "'&(quot|#34);'i",         // 替换 HTML 实体

 

         "'&(amp|#38);'i",

 

         "'&(lt|#60);'i",

 

         "'&(gt|#62);'i",

 

         "'&(nbsp|#160);'i",

 

         "'&(iexcl|#161);'i",

 

         "'&(cent|#162);'i",

 

         "'&(pound|#163);'i",

 

         "'&(copy|#169);'i",

 

         "'&#(\d+);'e");          // 做为 PHP 代码运行

 

 $replace = array ("",

 

          "",

 

          "\\1",

 

 

          "\"",

          "&",

 

          "<",

 

          ">",

 

          " ",

 

         chr(161),

 

          chr(162),

 

          chr(163),

 

         chr(169),

 

          "chr(\\1)");

 

 $text = preg_replace ($search, $replace, $document);

 

 ?>

2. HTML特殊字符

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

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

?

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

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

<script type="text/javascript"

 

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

 

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

 

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

 String.prototype.displayHtml= function(){ 

 

   //将字符串转换成数组

   var strArr = this.split(''); 

 

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

 

   var htmlChar="&<>"

 

   for(var i = 0; i< str.length;i++){

     //查找是否含有特殊的HTML字符 

 

     if(htmlChar.indexOf(str.charAt(i)) !=-1){ 

 

       //若是存在,则将它们转换成对应的HTML实体

       switch (str.charAt(i)) {             

 

         case '<'

 

           strArr.splice(i,1,'<'); 

 

           break

 

        case '>'

 

           strArr.splice(i,1,'>'); 

 

           break

 

         case '&'

 

           strArr.splice(i,1,'&'); 

 

       

     

 

   

 

  return strArr.join(''); 

 

 

 alert(str.displayHtml()); 

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

 

</script> 

3. escape()函数

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

?

1

2

3

4

5

6

7

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

 

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

 

request.onreadystatechange = updatePage;

 

request.send(null);

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

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

4. 引号问题

JSON中若是包含引号或双引号,会破坏JSON的格式。有两种方法能够解决。

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

$text = addslashes($text);

 

JavaScript的话,能够这样:

 

 function valueReplace(v){

 

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

 

return v;

 

 }

 

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

就总结到这里。

javaSE视频教程分享:

网盘下载地址:https://pan.baidu.com/s/1c1ZXnBa
相关文章
相关标签/搜索