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 ("''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" ",

29chr(161),

30chr(162),

31chr(163),

32chr(169),

33"chr(\\1)");

34

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

36?>

2. HTML特殊字符

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

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

01

02var str ='msg #';

03document.all.div1.innerHTML='

'+str+'

';

04

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

06String.prototype.displayHtml=function(){

07//将字符串转换成数组

08var strArr =this.split('');

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

10var htmlChar="&<>";

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

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

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

14//如果存在,则将它们转换成对应的HTML实体

15switch (str.charAt(i)) {

16case '

17strArr.splice(i,1,'

18break;

19case '>':

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

21break;

22case '&':

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

24}

25}

26}

27return strArr.join('');

28}

29alert(str.displayHtml());

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

31

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. 引号问题

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

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

1$text =addslashes($text);

JavaScript的话,可以这样:

1function valueReplace(v){

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

3return v;

4}

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

就总结到这里。

jsoncpp去掉多余字符_如何处理JSON中的特殊字符相关推荐

  1. java处理json特殊字符_如何处理JSON中的特殊字符

    JSON 是适用于 Ajax 应用程序的一种有效格式,原因是它使 JavaScript 对象和字符串值之间得以快速转换.由于 Ajax 应用程序非常适合将纯文本发送给服务器端程序并对应地接收纯文本,相 ...

  2. jsoncpp去掉多余字符_Python超详细的字符串用法大全

    本文要点 字符串拼接 拆分含有多种分隔符的字符串 判读字符串a是否以字符串b开头或结尾 调整字符串中文本的格式 对字符串进行左,右,居中对齐 删除字符串中不需要的字符 字符串拼接 实际场景:把列表中的 ...

  3. 如何处理JSON中的特殊字符 介绍几种解决方案

    http://www.nowamagic.net/librarys/veda/detail/216JSON 是适用于 Ajax 应用程序的一种有效格式,原因是它使 JavaScript 对象和字符串值 ...

  4. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  5. 快递拒收后怎么处理_如何处理快递中的错误

    快递拒收后怎么处理 If you use Express to develop your application, you probably thinking about Errors handlin ...

  6. JSON中数据特殊字符的处理

    JSon 数据中的String 传递数据时,需要处理好特殊字符 JSon数据中有特殊字符 1 :引号   如果是使用单引号,来括值的话,那String 中  '  单引号为特殊字符 2:正斜杠,反斜杠 ...

  7. python删除字符串中重复字符_从Python中删除字符串标点符号的最佳方法

    似乎有一个比以下更简单的方法: 1 2 3import string s ="string. With. Punctuation?" # Sample string out = s ...

  8. linux su无效_如何处理Linux中su命令无反应的情况

    在前面的文章有介绍过su命令,su命令用于普通用户和超级用户的切换,但在有些系统中,使用su命令无反应,那么遇到这种情况该如何处理呢?下面随小编一起来看看Linux下su命令无反应的处理方法. 出现问 ...

  9. qstring去掉特定字符_如何花式、批量且操作简单地处理字符?

    文本字符的规范化,是批量处理的前提.多来源数据或是数据收集本身就必然存在不规范情况,于是批量地完成它就成了常见的需求. 对于花式批量处理,自然要说到正则表达式. "正则表达式是对字符串操作的 ...

最新文章

  1. 【计算理论】计算理论总结 ( 自动机设计 ) ★★
  2. python 输出 GPU内存 最大使用率
  3. java 从控制台读取_转载 java从控制台读取输入的方法
  4. oracle group by sql,Oracle SQL GROUP BY“不是GROUP BY表达式”的帮助
  5. 【BZOJ1433】【codevs2347】假期的宿舍,最大流
  6. Python中的numpy.zeros()
  7. Help Me Escape
  8. 利用图片指纹检测高相似度图片--相似图片搜索的原理
  9. 修复Word打开文档默认显示两页的问题
  10. [总结]视频质量评价技术零基础学习方法
  11. python学习(25) BeautifulSoup介绍和实战
  12. ios 打包 验证应用失败原因汇总
  13. matlab中尖号,在Matlab中函數中的一個尖角消除掉
  14. (翻译)采用字母间距提高全大写文本可读性的方式
  15. 浅谈带宽,网速和流量之间的关系
  16. mbp2015 款发热主因
  17. 01 Roll A Ball 小游戏(环境搭建)
  18. 一个编得好的拼音输入法C51的
  19. java股票雪球数据接口_雪球股票数据源
  20. 机器学期第一学期小结

热门文章

  1. SAP Spartacus UserService.get方法的调用时机
  2. ABAP和Go语言的初始化操作, Kubernetes的Init Container
  3. Fiori Elements objectPage component creation ui JSON model creation oModel.getMetaModel().load
  4. Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
  5. what is the location of js when using run as server in Eclipse
  6. Opportunity在Fiori cloud system上编辑之后超时的根源分析
  7. jQuery.proxy debug
  8. what does the checkbox Continue mean in Text Access Sequence customizing
  9. Product not scheduled in sales organization XXX,distribution channel
  10. SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解