如何处理JSON中的特殊字符_javascript技巧

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传值的时候,如果有回车符就会挂的。我们可以使用正则来去掉回车符:

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

 // 不用正则 

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

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

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

 <?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页面前转换一下即可:

 <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,浏览器并不会将其视为空格处理,而是不做更改,将其直接传递到服务器)。之后,服务器会(通常自动)再把它们转换回它们传输后的本来 “面目”。

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。

 $text = addslashes($text); 

JavaScript的话,可以这样:

 function valueReplace(v){ 

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

return v; 

 } 

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

就总结到这里。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索json特殊字符处理
json中的特殊字符
javascript特殊字符、json特殊字符处理、json 特殊字符、json特殊字符转义、json中的特殊字符,以便于您获取更多的相关知识。

时间: 2024-09-17 03:05:27

如何处理JSON中的特殊字符_javascript技巧的相关文章

ios-解析JSON中的特殊字符

问题描述 解析JSON中的特殊字符 从 foursquare api抓取本地数据,然后将数据传递到webservice 添加给database. 现在我已经获取的当地数据为Mexico,其中有一些特殊字符一起的下列错误: Unrecognized escape sequence. (13443): 使用下面的JSON编码: NSString *requestString = [jsonstring UTF8String]; 如何解析这些特殊字符?(比如西班牙 ?spanol) 解决方案 +(NS

javascript中判断json的方法总结_javascript技巧

简单地说, JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串(伪对象) ,然后就可以在函数之间轻松地传递这个字符串,或者 在异步应用程序中将字符串从 Web 客户端传递给服务器端程序 .这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/ 值对更复杂的结构.例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表. 判断json是否为空 复制代码 代码如下: var jsonStr ={}; 1.判

js中的json对象详细介绍_javascript技巧

1.JSON(JavaScript Object Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包. JSON的规则很简单:对象是一个无序的"'名称:值'对"集合.一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟一个":"(冒号):"'名称/值'对&qu

深入理解JavaScript中的并行处理_javascript技巧

前言 为什么说多线程如此重要?这是个值得思考的问题.一直以来,派生线程以一种优雅的方式实现了对同一个进程中任务的划分.操作系统负责分配每个线程的时间片,具有高优先级并且任务繁重的线程将分配到更多的时间片,而低优先级空闲的线程只能分到较少的时间片. 虽然多线程如此重要,但JavaScript却并没有多线程的能力.幸运的是,随着 Web Worker 的普及,我们终于可以在后台线程来处理资源密集型的计算了.而不好的方面是,目前制定的标准只适用于当前的生态系统,这有时候就比较尴尬了.如果你了解其他从一

基于javascript如何传递特殊字符_javascript技巧

在没步入正轨之前,先给大家介绍JavaScript 特殊字符 你可以在 JavaScript 中使用反斜杠来向文本字符串添加特殊字符. 插入特殊字符 反斜杠用来在文本字符串中插入省略号.换行符.引号和其他特殊字符. 请看下面的 JavaScript 代码: var txt="We are the so-called "Vikings" from the north." document.write(txt) 在 JavaScript 中,字符串使用单引号或者双引号来

xml和web特殊字符_javascript技巧

复制代码 代码如下: def covert_xml_special_char(convert_str): '''''替换xml中的特殊字符''' convert_str = convert_str.replace('&', '&') convert_str = convert_str.replace('"''"', '"') convert_str = convert_str.replace("'", ''') convert_str =

JS操作JSON要领详细总结_javascript技巧

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意味着在 JavaScript 中处理 JSON数据不须要任何特殊的 API 或工具包. 本文主要是对JS操作JSON的要领做下总结. 在JSON中,有两种结构:对象和数组. 1. 一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"后跟

使用Ajax与服务器(JSON)通信实例_javascript技巧

 Ajax这个词,不代表任何东西,它仅仅是称呼一系列促进客户端与服务器通信的技术时所用的一个术语.服务器通信时Ajax技术的核心内容,其目标就是从客户端向服务器发送信息,并接受后者的回传,以求在此过程中创建出更好地打用户体验来. Ajax之前所有的服务器通信都是在服务器上完成的,所以那是若想重绘页面的一部分,要么使用iframe(已淘汰),要么刷新整个页面.这两种方式都称不上是良好的用户体验. Ajax提供了两类服务器通信手段:同步通信和异步通信. 异步通信Ajax比同步通信要常见的多了,大概是

浅谈JS中json数据的处理_javascript技巧

1. json数据结构(对象和数组) json对象:var obj = {"name":"xiao","age":12}; json数组:var objArray = [{"name":"xiao","age":12},{"name":"xiao","age":12}]; 2. 处理json数据,依赖文件有:jQuery.js