`
dengkane
  • 浏览: 40401 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何处理JSON中的特殊字符

阅读更多

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

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

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

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. 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的格式。有两种方法可以解决。

在入库的时候可以使用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)))

就总结到这里。

 

[转载自:http://www.cnblogs.com/hanyun/archive/2012/05/11/2495724.html]

分享到:
评论

相关推荐

    JSON数据中存在单个转义字符“\”的处理方法

    主要介绍了JSON数据中存在单个转义字符“”的处理方法,在这里反斜杠(又称右斜杠""),还表示转义字符,字符串中不能成单出现。具体内容详情大家跟随脚本之家小编一起看看吧

    jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法

    看到很多网上对含特殊字符 json 数据处理,都是逐个判断是哪个特殊字符,比如回车如何处理,引号如何处理。其实有现成的代码库可以做这件事情,下载 json-lib-2.3-jdk15.jar : 代码如下: import ...

    Delphi7用superobject解析Json数据,superobject.pas下载

    Delphi读写操作JSON字符串时,需引用一个superobject.pas文件。 var jo,jt:ISuperObject; begin jo:=SO();... ShowMessage('人员中姓名的JSON值:'+jt.O['人员'].S['姓名']);//获取指定JSON值 end;

    js中json处理总结之JSON.parse

    同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。 踩过的坑都将成为路上的风景。 队友在cookie中已存以下值: address_info {"address_name":"人民大会堂...

    JQuery对id中含有特殊字符的转义处理示例

    有时在处理html时, 为了和php结合的方便, 会利用数组a[]这里的id,或者id中包含其他特殊字符比如 /@ 等为了利用jquery获取该元素, 需要转义特殊字符 直接上例子 代码如下: ”a[]”&gt;kkkkkk&lt;/div&gt; [removed] //方法1 $...

    JS中Eval解析JSON字符串的一个小问题

    JSON 是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。 JSON的规则很简单: 对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右...

    Json转换利器Gson实例代码

    Json转换利器Gson之实例五-实际开发中的特殊需求处理 (http://blog.csdn.net/lk_blog/article/details/7685237) Json转换利器Gson之实例六-注册TypeAdapter及处理Enum类型 ...

    jsp中URL传递中文参数的处理方法

    在页面的url中使用encodeURI(encodeURI(中文)),对中文... 您可能感兴趣的文章:js将json格式的对象拼接成复杂的url参数方法js的form表单提交url传参数(包含+等特殊字符)的两种解决方法JS根据key值获取URL中的参数值及

    java调用shell向DataX传参,带where条件,特殊字符

    java调用shell命令,在shell命令中调用DataX任务并传递参数。 坑主要在DataX传递参数涉及到特殊字符应该如何处理这块,有时间可以自己试; 没时间可以用我的经验,自己选择;

    bad_json_parsers:暴露几种编程语言的json解析器中的问题

    JSON解析器的嵌套级别 记录几种编程语言的JSON解析器如何处理深度嵌套的结构。介绍许多JSON解析器(以及通常的许多解析器)都使用来解析嵌套结构。 这在对解析器进行编程时非常方便,但是会影响解析器可以解析的内容...

    JSON 数据格式介绍

    JSON 格式时,只需处理好特殊字符即可。另外,必须用 (“) 而非 (‘) 表示字符串: 代码如下: static String string2Json(String s) { StringBuilder sb = new StringBuilder(s.length()+20); sb.append(‘\”‘);

    3分钟掌握常用的JS操作JSON方法总结

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。 在JSON中,有两种结构:对象和数组 1、...

    javascript解析json格式的数据方法详解

    它是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。那么如何用JavaScript来解析json呢? 首先,科普一下json。在json中,有两种结构:对象和数组。 一个对象以“{...

    在JavaScript中使用JSON数据

    JSON 是 JavaScript 原生格式,这意味着 在 JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。 JSON语法 JSON建构于两种结构: 对象——名称/值对的集合。不同的语言中,它被理解为对象,纪录,结构,...

    javascript操作JSON的要领总结

    同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包。 本文主要是对JS操作JSON的要领做下总结。 在JSON中,有两种结构:对象和数组。 1. 一个对象以“{”(左...

    编码转换/解决易语言不能显示字符(包括emoji)

     本源码实现了将易语言不能显示的字符转换成USC2编码,这样您可以输出到编辑框\列表框\存到数据库等等.技术顾问: Jβ。例如: 。 这段hex数据:F0 9F 98 B1 E5 93 88 E5 93 88 F0 9F 98 B1 F0 9F 98 B1(UTF8编码)。...

Global site tag (gtag.js) - Google Analytics