如何处理JSON中的php json特殊字符处理

介绍几种解决方案
服务器君一共花费了16.527 ms进行了2次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议
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过滤脚本:
// $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 ("",
"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.i++){
//查找是否含有特殊的HTML字符
if(htmlChar.indexOf(str.charAt(i)) !=-1){
//如果存在,则将它们转换成对应的HTML实体
switch (str.charAt(i)) {
strArr.splice(i,1,'<');
strArr.splice(i,1,'>');
strArr.splice(i,1,'&');
return strArr.join('');
alert(str.displayHtml());
document.all.div2.innerHTML=str.displayHtml();
3. escape()函数
该函数可以处理空格、斜线和其他任何可能影响浏览器的内容,并将它们转换成 Web 可用字符(比如,空格会被转换成 %20,浏览器并不会将其视为空格处理,而是不做更改,将其直接传递到服务器)。之后,服务器会(通常自动)再把它们转换回它们传输后的本来 “面目”。
var url = "nowamagic.php?people=" + escape(people.toJSONString());
request.open("GET", url, true);
request.onreadystatechange = updateP
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'),"\\\"");
var eValue = encodeURI($.trim(valueReplace(e.value)))
就总结到这里。
本文地址:,欢迎访问原出处。
不打个分吗?
转载随意,但请带上本文地址:
如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 。
大家都在看
现代魔法研究协会欢迎你
阅读一百本计算机著作吧,少年
尼古拉斯·泽卡斯(Nicholas C.Zakas) (作者), 李松峰 (译者), 曹力 (译者)
《JavaScript高级程序设计(第2版)》在上一版基础上进行了大幅度更新和修订,融入了近几年来JavaScript应用发展的最新成果,几乎涵盖了所有需要理解的重要概念和最新的JavaScript应用成果。从颇具深度的JavaScript语言基础到作用域(链),从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(BOM)、文档对象模型(DOM)到基于事件的Web脚本设计,从XML(E4X)到Ajax及JSON,从高级前端开发技术到前沿的客户端存储,从最佳编程实践到即将成为现实的API,直至JavaScript未来的发展,全景式地展示了JavaScript高级程序设计的方方面面。
扫一扫,在手机上阅读
栏目最新博文
26,219 views
18,420 views
16,106 views
13,630 views
13,701 views
11,816 views
17,078 views
13,087 views
12,588 views
13,078 views
栏目博文推荐
4,826 views
10,205 views
8,205 views
11,679 views
31,476 views
4,124 views
3,824 views
4,928 views
56,747 views
10,541 views
当我们不再年轻的时候,当我们不再做程序的时候,唯有这些博客,记录着我们曾经为程序欣喜、为程序付出过汗水的经历。
1,299 views
1,284 views
1,131 views
关于网站与作者
互联网信息太多太杂,各互联网公司不断推送娱乐花边新闻,SNS,微博不断转移我们的注意力。但是,我们的时间和精力却是有限的。这里是互联网浩瀚的海洋中的一座宁静与美丽的小岛,供开发者歇息与静心潜心修炼(愿景)。
“Veda”的本义是知识、启示,希望这里能为开发者提供充足的技术资料。
我的电子邮件gonnsai(,腾讯微博:,欢迎与我联系。问题:json数据中有特殊字符,该如何处理
描述:有一json如:{"user_info_list":[{"subscribe":1,"nickname":"梁","city":"","province":"巴黎","country":"法国","groupid":0},{"subscribe":1,"nickname":"默笙","city":"O[\q","province":"^N","country":"","groupid":0}]} 用json_decode函数转化为null,原因是"city":"O[\q","province":"^N"受这些影响。该对诸如此类的字符有什么解决的办法没解决方案1:json_decode函数是什么东西?解决方案2:把字符串里的\转义如果是字符串 就要变成\\\\var_dump(json_decode('{"city": "O[\\\\q"}'));
以上介绍了“json数据中有特殊字符,该如何处理”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:/itwd/1510864.html
上一篇: 下一篇:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&JSON现在是很常见的处理数据的方式了,但是在使用JSON的时候,有些特殊字符会让我们得到非预期的结果。JSon数据中常见的特殊字符有:引号,正斜杠,反斜杠,换行符号等。下面介绍JSON中的特殊字符该如何去掉的方法
使用JSON从后台向前台传输数据的时候,当数据本身含有一些特殊字符,会导致JSON数据的解析出错。这个时候,就需要将JSON中的特殊字符过滤掉。
用下面的方法对即将向前台输出的json字符串进行处理,可以解决键盘上能输入的所有特殊字符问题。
/// &summary&
/// 过滤特殊字符
/// &/summary&
/// &param name="s"&&/param&
/// &returns&&/returns&
private static string String2Json(String s)
StringBuilder sb = new StringBuilder();
for (int i = 0; i & s.L i++)
char c = s.ToCharArray()[i];
switch (c)
case '\"':
sb.Append("\\\""); break;
case '\\':
sb.Append("\\\\"); break;
sb.Append("\\/"); break;
case '\b':
sb.Append("\\b"); break;
case '\f':
sb.Append("\\f"); break;
case '\n':
sb.Append("\\n"); break;
case '\r':
sb.Append("\\r"); break;
case '\t':
sb.Append("\\t"); break;
if ((c &= 0 && c &= 31)||c ==127)//在ASCⅡ码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符
sb.Append(c);
return sb.ToString();
阅读(...) 评论()顺便记录一个PHP过滤脚本:
// $document 应包含一个 HTML 文档。
// 本例将去掉 HTML 标记,javascript 代码
// 和空白字符。还会将一些通用的
// HTML 实体转换成相应的文本。
$search = array ("'&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 ("",
"chr(\\1)");
$text = preg_replace ($search, $replace, $document);
HTML特殊字符
从服务器端以JSON格式将数据传递到客户端后,通过JS显示在HTML页面时,有一些特殊字符不能直接显示,如后台传递过来的是 'msg #' 通过JS显示在HTML页面中时,显示成了 msg # ,并不是msg #,这是由于&与&之间的内容看作是HTML标签了,而以&开头的 与#为HTML实体,所以显示不正常。
解决办法很简单,在JS将其渲染到HTML页面前转换一下即可:
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)){
strArr.splice(i,1,'&');
strArr.splice(i,1,'&');
strArr.splice(i,1,'&');
return strArr.join('');
alert(str.displayHtml());
document.all.div2.innerHTML=str.displayHtml();
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 请求。
JSON中如果包含引号或双引号,会破坏JSON的格式。有两种方法可以解决。
在入库的时候可以使用addslashes()函数处理一下字符串,给引号前加上斜杠。被改的字符包括单引号 (')、双引号 (")、反斜线 backslash () 以及空字符NULL。
$text = addslashes($text);
JavaScript的话,可以这样:
function valueReplace(v){
v=v.toString().replace(newRegExp('(["\"])','g'),"\\\"");
var eValue = encodeURI($.trim(valueReplace(e.value)))
--------------------------------------分割线 --------------------------------------
Struts中异步传送XML和JSON类型的数据
Linux下JSON库的编译及代码测试
jQuery 获取JSON数据[$.getJSON方法]
用jQuery以及JSON包将表单数据转为JSON字符串
在C语言中解析JSON配置文件
--------------------------------------分割线 --------------------------------------
本文永久更新链接地址:
相关资讯 & & &
& (07月10日)
& (05月18日)
& (02月12日)
& (06月15日)
& (04月16日)
& (12/14/:02)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 json中的特殊字符 的文章

 

随机推荐