php json_json decode gbk使用问题

PHP中使用了mcrypt_decrypt函数处理Json串后导致Json_decode返回null问题-PHP教程-第七城市
PHP中使用了mcrypt_decrypt函数处理Json串后导致Json_decode返回null问题
昨天在对生成的json文件进行decode操作时 突然发现返回的是NUll,(json文件里面的json串是加密后的),经过反复测试 ,发现只要json中包含中文字符,并进行解密操作后,就导致decode操作返回NULL,如果没有汉字是正常的decode.& & & &刚开始以为是编码导致,反复测试后,还是有问题,最后找到解密操作里面,发现了mcrypt_decrypt 函数,查手册发现 这个函数有可能在返回的字符后面 带上隐藏字符 /0 &,会不会是这个造成的呢? &于是使用str_replace(&/0&,&&,$json); &结果就出来了,我擦,浪费了半天时间。php 利用json_decode强制json数据转换成数组
来源:&&&时间: 19:02:26&&&阅读数:
[导读] 一篇php 利用json_decode强制json数据转换成数组的简单应用实例参考文档,我们利用了var_dump(json_decode($str,true)); 就把json转换成我们想要的数据了。
代码如下复制代码
$a[d][]=1;$a[d][]=2;
一篇php 利用json_decode强制json数据转换成数组的简单应用实例参考文档,我们利用了var_dump(json_decode($str,true)); 就把json转换成我们想要的数据了。
$a['d'][]=1;
$a['d'][]=2;
echo $str=json_encode(array($a));
var_dump(json_decode($str));
array(1) {
& object(stdClass)#1 (1) {
&&& [&d&]=&
&&& array(2) {
&&&&& [0]=&
&&&&& int(1)
&&&&& [1]=&
&&&&& int(2)
看到了吧这是一个数组里面放置一个对象;
我们强制json_decode结果转换为数组吧&&把第四行加上参数
var_dump(json_decode($str,true));
array(1) {
& array(1) {
&&& [&d&]=&
&&& array(2) {
&&&&& [0]=&
&&&&& int(1)
&&&&& [1]=&
&&&&& int(2)
除非特别声明,PHP100新闻均为原创或投稿报道,转载请注明作者及原文链接原文地址:
延伸阅读 More
haowubai&&
haowubai&&
haowubai&&
视频教程 Video
网站服务:
专题合作 : liuyh@
会员问题 : QQ
友情链接 : QQ
网站投稿 :
@php100官方
php100官方微信
Copyright (C) 2007-, All Rights Reserved 版权所有 上海创恩信息技术有限公司. 沪ICP备号但是有个问题& & 虽然JS解码JSON非常方便,但是编码似乎没有什么好办法…& & 本着能懒即懒,不能懒也尽量懒的原则,古狗了一下& & 还真让我发现了& & PHP里直接用json_decode就可以解码,用起来相当方便& & 复制代码代码如下:& & function json_encode_js(aaa){& & function je(str){& & var a=[],i=0;& & var pcs="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";& & for (;i<str.i++){& & if(pcs.indexOf(str[i]) == -1)& & a[i]="\\u"+("0000"+str.charCodeAt(i).toString(16)).slice(-4);& & else& & a[i]=str[i];& & }& & return a.join("");& & }& & var i,s,a,aa=[];& & if(typeof(aaa)!="object") {alert("ERROR json");}& & for(i in aaa){& & s=aaa[i];& & a='"'+je(i)+'":';& & if(typeof(s)=='object'){& & a+=json_encode_js(s);& & }else{& & if(typeof(s)=='string')& & a+='"'+je(s)+'"';& & else if(typeof(s)=='number')& & a+=s;& & }& & aa[aa.length]=a;& & }& & return "{"+aa.join(",")+"}";& & }& & 您可能感兴趣的文章:php中json_decode()和json_encode()的使用方法PHP中json_encode、json_decode与serialize、unserialize的性能测试分析PHP json_decode函数详细解析php使用json_encode对变量json编码php数组转换js数组操作及json_encode的用法详解php json_encode值中大括号与花括号区别PHP json_encode中文乱码问题的解决办法PHP5.4中json_encode中文转码的变化小结PHP学习散记_编码(json_encode 中文不显示)php json_encode奇怪问题说明php中json_encode中文编码问题分析php array_unique之后json_encode需要注意浅析php中json_encode()和json_decode()& & QQ空间
百度搜藏更多& & Tags:json json decode& & 复制链接收藏本文打印本文关闭本文返回首页& & 上一篇:利用json获取字符出现次数的代码& & 下一篇:教你如何使用PHP输出中文JSON字符串& & 相关文章JSON 学习之JSON in JavaScript详细使用说明nodejs教程 安装express及配置app.js文件的详细步骤Jquery+asp.net后台数据传到前台js进行解析的方法json 入门学习笔记 示例代码json 介绍 js简单实例web页面数据展示新想法(json)jQuery 遍历json数组的实现代码JSON.stringify 语法实例讲解json-lib出现There is a cycle in the hierarchy解决办法解决json日期格式问题的3种方法& & 文章评论& & 最 近 更 新& & json简单介绍json编写简单一例JSON 和 JavaScript. eval使用说明JSON 学习之JSON in JavaScript详细使用说说说JSON和JSONP 也许你会豁然开朗Javascript生成json的函数代码(可以用phpJSONP 跨域共享信息javascript操作JSON的要领总结JSON辅助格式化处理方法javascript. 循环读取JSON数据的代码& & 热 点 排 行& & JS对象与JSON格式数据相互转换js中将字符串转换成json的三种方JSON.stringify 语法实例讲解jQuery 遍历json数组的实现代码json 实例详细说明教程json-lib出现There is a cycle ijavascript. 循环读取JSON数据的代Json对象与Json字符串互转(4种转比较详细的关于javascript. 解析jJavaScript. 创建对象
说明:该文章系网友上传分享,若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益PHP中JSON_DECODE解码时数据编码的问题
在最近一个项目中,当要进行觖码的内容中含有中文时,如果中文是UTF-8编码,则可以正确解码。而如果将内容转换为GBK编码,则解码后的内容是空的,即使内容里面含有英文,解码后的内容也是空的。而如果要进行解码的内容全部是英文,将内容转换为GBK编码后,再用json_decode进行解码,内容一切是正常的,因为GBK、UTF-8主要是对中文(或日文、韩文)来说的,因为数字、字母等单字节字符不管用什么编码内容都是一样的。1.测试一&?phpdefine('l', &&br /&\n&);$aa = '{&address&:&北京市海淀区上地十街&, &company&:&百度公司&}';echo 'json_decode1:';print_r(json_decode($aa, true));$aa = iconv('UTF-8', 'GBK', $aa);echo 'json_decode2:';print_r(json_decode($aa, true));?&输出如下:json_decode1:Array(&&& [address] =& 北京市海淀区上地十街&&& [company] =& 百度公司)&br /&json_decode2:&br /& //注意这里的输出是空的2.测试二&?phpdefine('l', &&br /&\n&);$aa = '{&address&:&beijing&, &company&:&baidu&}';echo 'json_decode1:';print_r(json_decode($aa, true));$aa = iconv('UTF-8', 'GBK', $aa);echo 'json_decode2:';print_r(json_decode($aa, true));?&输出如下:json_decode1:Array(&&& [address] =& beijing&&& [company] =& baidu)&br /&aa: {&address&:&beijing&, &company&:&baidu&}&br /&json_decode2:Array(&&& [address] =& beijing&&& [company] =& baidu)&br /&延伸阅读:/s?wd=gbk+utf8+%CA%FD%D7%D6+%D7%D6%C4%B8/s?wd=php+json_decode+gbk+utf-8
我的相关日志:&|&&|&&|&
&&最后修改于
请各位遵纪守法并注意语言文明研究js、php等web相关技术问题:用php读取文件中的json数据,怎么解析都是返回null。{&a&:1,&b&:2,&x&:[{&c&:3},{&d&:4},{&e&:5}]}读取文件,使用了file_get_contents函数。$json = '{&a&:1,&b&:2,&x&:[{&c&:3},{&d&:4},{&e&:5}]}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));如果直接在php中读取json字符串,是没有错的,怎么从文件读取就错了呢。php5.2以后自带json_decode函数,但是对json文本串的格式要求非常严格。很可能使用该函数得到的返回值是NULL使用json_last_error()函数获取到的返回值是JSON_ERROR_SYNTAX(Syntax error)。可以通过以下几个方式排错。json字符串必须以双引号包含 $output = str_replace(&'&, '&', $output);json字符串必须是utf8编码$output = iconv('gbk', 'utf8', $output);不能有多余的逗号 如:[1,2,],用正则替换掉preg_replace('/,\s*([\]}])/m', '$1', $output)数组对象是需要用print_r ,不能用echo之后还有乱码情况 ..我的个案是这样的.header(&Content-Type: text/ charset=UTF-8&);造成json_decode() 解析null的原因关键结果在是,json文件是UTF-8格式带有BOM修正后代码如下,即可正常解析$dmText = file_get_contents( AROOT .'data' . DS . 'DMType.json.php');
if(preg_match('/^\xEF\xBB\xBF/',$dmText))
$dmText = substr($dmText,3);
$dmText = t($dmText);
/* create array list from comments */
$dmList = json_decode($dmText,true);
//当该参数为 TRUE 时,将返回 array 而非 object 。
var_dump($dmList);显示结果:View Code
"success": "true",
"total":"4",
"items": [
{"id":"1","c":"asdaEG","tb": "dm_suppliertype", "cn": "供应商类型","tips":"供应商类型"},
{"id":"2","c":"adsafR","tb": "suppliertype2", "cn": "供应商类型2","tips":"供应商类型"},
{"id":"3","c":"ada222","tb": "suppliertype3", "cn": "供应商类型3","tips":"供应商类型"},
{"id":"4","c":"23jetG","tb": "suppliertype4", "cn": "供应商类型4","tips":"供应商类型"}
}array(3) {
["success"]=&
string(4) "true"
["total"]=&
string(1) "4"
["items"]=&
array(4) {
array(5) {
string(1) "1"
string(6) "asdaEG"
string(15) "dm_suppliertype"
string(15) "供应商类型"
["tips"]=&
string(15) "供应商类型"
array(5) {
string(1) "2"
string(6) "adsafR"
string(13) "suppliertype2"
string(16) "供应商类型2"
["tips"]=&
string(15) "供应商类型"
array(5) {
string(1) "3"
string(6) "ada222"
string(13) "suppliertype3"
string(16) "供应商类型3"
["tips"]=&
string(15) "供应商类型"
array(5) {
string(1) "4"
string(6) "23jetG"
string(13) "suppliertype4"
string(16) "供应商类型4"
["tips"]=&
string(15) "供应商类型"
}附录:1、PHP5中file_get_contents函数获取带BOM的utf-8文件内容时需注意PHP5中的file_get_contents函数获取文件内容,实际是按二进制来读取的,所以,当你用file_get_contents去获取一个带BOM的UTF-8文件时,它并不会把UTF-8的BOM去掉,当你把读取的内容当作文本内容来进行一些操作时,可能会发生一些意想不到的结果。这并不能算作一个BUG,因为file_get_contents函数读取文件的时候,是按二进制来读取的,读取到的内容是包含BOM的,而用户操作的时候,想当然的以为读取到的内容是不包含BOM的文本内容(如用记事本打开后看到的内容),因为BOM在编辑软件中是不可见的,只有在十六进制模式下才可以看见,问题也就出在这,实际上是由于“操作不统一”造成的。当对UTF-8编码的文件进行操作时,如果要把读取的内容当作文本内容来处理,最好先对BOM进行一些处理,这个问题在PHP6中得到了解决(可以设置文本/二进制读取模式),有兴趣的朋友可以自己查找PHP6的手册。一个较简单的解决方法:&?php
$dataStr=file_get_contents('test.txt');
if(preg_match('/^\xEF\xBB\xBF/',$dataStr))
$dataStr=substr($dataStr,3);
//对$dataStr进行操作
?&什么是BOM?BOM是Byte Order Mark的缩写,即字节顺序标记,它是插入到UTF-8,UTF-16或UTF-32编码的Unicode文件开头的特殊标记,用来标识Unicode文件的编码类型。几种编码对应的BOM:EF BB BF
UTF-8 FE FF
UTF-16 (big-endian) FF FE
UTF-16 (little-endian) 00 00 FE FF UTF-32 (big-endian) FF FE 00 00 UTF-32 (little-endian)对于UTF-8编码的文件而言,BOM标记是可有可无的,Windows自带的记事本文件在保存为UTF-8编码时,会自动加上BOM,现在一些编辑软件,可以在保存为UTF-8编码时可以选择是否带BOM保存。对于PHP文件,在使用UTF-8编码时,最好都不要BOM保存。因为当你使用include/require/include_once/require_once这些函数去包含一个带BOM的文件时,你得到的网页,在某些兼容性不是很好的浏览器下,你会发现你的网页的实际显示效果跟预期的有细微的差别。2、检测文件是否有bom头&?php
//此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除
//By Bob Shen
$basedir = &.&;
//修改此行为需要检测的目录,点表示当前目录
$auto = 1;
//是否自动移除发现的BOM信息。1为是,0为否。
// 以下不用改动
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='..' && !is_dir($basedir.&/&.$file)) echo &filename: $file &.checkBOM(&$basedir/$file&).& &br&&;
closedir($dh);
function checkBOM ($filename) {
$contents = file_get_contents($filename);
$charset[1] = substr($contents, 0, 1);
$charset[2] = substr($contents, 1, 1);
$charset[3] = substr($contents, 2, 1);
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
if ($auto == 1) {
$rest = substr($contents, 3);
rewrite($filename, $rest);
return (&&font color=red&BOM found, automatically removed.&/font&&);
return (&&font color=red&BOM found.&/font&&);
else return (&BOM Not Found.&);
function rewrite ($filename, $data) {
$filenum = fopen($filename, &w&);
flock($filenum, LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}Via:最后,有什么问题,大家可以给我留言哦,别忘了关注我的博客哦:
此条目发表在分类目录,贴了, , , , , 标签。将加入收藏夹。
亲,加个关注呗~在线工具
热评文章功能订阅乱炖

我要回帖

更多关于 json encode decode 的文章

 

随机推荐