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中,字符串必须用双引号(")括起来。如果字符串内部需要包含双引号,或者其他特殊字符如反斜杠(\)、换行符(\n)、制表符(\t)等,都需要进行转义。以下是常见的JSON特殊字符及其...
【适用人群】: 主要面向软件开发者、数据处理专员、图像处理工程师以及任何需要批量更新JSON中图像数据格式的用户。尤其适合那些在机器学习、Web开发或数字资产管理项目中工作的人士。 【使用场景】: 应用于需要...
在Java中,处理JSON通常需要借助第三方库。提到的"处理JSON的jar包"指的是一个包含JSON处理功能的Java库,特别是其中的`json-lib-1.1-jdk13.jar`。这个jar包是`json-lib`项目的一部分,这是一个Java库,用于将Java...
通过阅读这两个文件,我们可以更深入地了解这个特定实现的工作原理,包括如何处理JSON的不同数据类型(如字符串、数字、布尔值、null、数组和对象)以及如何构建自定义的访问接口。 在实际应用中,这样的自定义JSON...
这个"**gson-jar**"的资源显然包含了Gson库的JAR文件,便于开发者在项目中直接引用,处理JSON字符串。在Java开发中,JSON是一种常用的数据交换格式,因其轻量级、易于读写而被广泛采用。Gson库的出现极大地简化了...
在PHP中,将PHP对象转换成JSON(JavaScript Object Notation)字符串是一项常见的任务,尤其是在进行Web开发时,因为JSON是一种轻量级的数据交换...通过学习和理解这些知识点,你将能够更有效地在PHP中处理JSON数据。
如果在进行了上述所有操作后,`json_decode()`函数仍然返回`NULL`,那么可能是因为JSON字符串中存在不可见的特殊字符或者格式问题。这时候需要仔细检查JSON字符串,确保格式的正确性,特别是确保所有的双引号`"`都...
在Java编程中,验证字符串是否符合JSON...在处理JSON数据时,还应考虑性能和资源消耗,避免不必要的对象创建和解析。通过合理地设计和使用JSON验证工具,可以提高代码的健壮性和可靠性,从而提升整个系统的质量。
- 未转义的特殊字符,如双引号(")或反斜杠(\)。 使用JSON校验器时,用户只需将待验证的JSON字符串输入到工具中,点击校验按钮,工具会在几秒钟内返回结果。如果字符串有效,会显示成功信息;如果存在错误,会显示...
在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式...通过理解和熟练掌握这些知识点,你将能够有效地在C#项目中处理JSON数据,无论是从服务器获取数据,还是向客户端发送数据,都能游刃有余。
HTML实体是一种在HTML文档中用来表示特殊字符的方式,例如`&`表示`&`符号。如果JSON字符串中含有HTML实体,`json_decode()`无法将其正确解析为PHP数据类型,因此需要先转换。 2. 使用`stripslashes()`函数:该...
本篇将探讨如何在Java中处理JSON。 首先,文档中使用的库是`net.sf.json`,这是一个开源的Java库,它提供了对JSON的全面支持,包括序列化和反序列化Java对象到JSON,以及从JSON解析回Java对象。具体来说,`...
此外,文件中还提到,如果JSON数据中存在奇数个反斜杠而后台没有进行处理,移动端可以先过滤掉这些特殊字符。这个提示意味着,在某些情况下,我们可以选择简化处理,直接移除所有反斜杠,但这种做法可能会导致原本...
JSON规范要求数据应该是有效的JavaScript语法,这意味着JSON字符串不能包含某些特殊字符,包括未经转义的换行符。在JSON字符串中,换行通常应被转义为`\n`。如果从Ajax请求中接收到的JSON数据包含了未转义的换行符,...
在开发Web应用时,我们经常会遇到一个问题:当使用Spring MVC的`@ResponseBody`注解将后端处理结果直接转化为HTTP响应体时,如果这个结果中包含HTML特殊字符,如尖角号、引号、按位与符号等,浏览器可能会误解析,...
在老版本的PHP中,处理JSON字符串时需要注意转义特殊字符。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集,但是JSON是...
在`HttpURLConnection`中,我们直接向输出流写入JSON字符串;而在`HttpClient`中,我们创建一个`StringEntity`,并将其设置为HTTP请求的实体。 在Spring服务端,通常会配置一个`@RestController`,该控制器会接收`@...
5. **处理JSON对象**:如果需要在客户端进一步处理JSON数据,可以将其解析为JavaScript对象,使用`JSON.parse`方法。这样就可以像操作普通JavaScript对象一样操作这些数据。 在给定的文件中,`Form2Json.htm`可能是...