Tag: json预览模式: 普通 | 列表

PHP中json的用法

从事WEB相关开发的人员相信对json应该不会陌生,我在这里也无需多说了,可以直接看官方的文档。

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.Via

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。Via

下面我们来进行2个测试:

测试前的2项配置如下:
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

1.测试一
字符串$str中含有一些特殊字符,如"、'及\

$str = 'ok":\'\\';
echo "str: $str\n";
$str1 = json_encode($str);
echo 'json_encode:' . $str1 . "\n";
$str2 = json_decode($str1);
echo 'json_decode:' . $str2 . "\n";

输出如下,我是在linux的命令行下运行的,json_encode以后在字符串的两边加上了双引号("),
"变成了\",\变成了\\,'还是'。在json_decode以后内容可以变为json_encode以前的内容。

此时有个小问题要注意一下,如果此数据是要返回给前端的,特殊处理需要单独处理一下。
例如name:"ok":'\"这样肯定不行,js肯定会报错的,正确的方法是如果觉得返回的内容可能有特符字符,用addslashes处理一下就行了。
$name = "ok\":'\\";
$name = addslashes($name);
{name: "ok\":'\\"}

str: ok":'\
json_encode:"ok\":'\\"
json_decode:ok":'\

2.测试二
2与1中是差不多的,只不过加了一个addslashes的处理。

$str = 'ok":\'\\';
echo "str: $str\n";
$str = addslashes($str);
echo "str: $str\n";
$str1 = json_encode($str);
echo 'json_encode:' . $str1 . "\n";
$str2 = json_decode($str1);
echo 'json_decode:' . $str2 . "\n";

输出如下:
str: ok":'\
str: ok\":\'\\
json_encode:"ok\\\":\\'\\\\"
json_decode:ok\":\'\\

3.json关于中文的处理
a.不能处理GB编码,所有的GB编码都会替换成空字符.
b.utf8编码的中文被编码成unicode编码,相当于javascript的escape函数处理的结果.

utf8编码的中文会被编码为unicode编码,取出时用json_decode解码后不用作任何处理后在网页上可以正常显示中文。
telnet localhost 1977
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
get top_song
VALUE top_song 0 1037
[{"songid":"154","songname":"\u575a\u6301\u5230\u5e95","sengername":"\u963f\u675c"},{"songid":"52715","songname":"\u5929\u8def","sengername":"\u97e9\u7ea2"},{"songid":"66969","songname":"\u72af\u9519 - \u65af\u7434\u9ad8\u4e3d\/\u987e\u5cf0","sengername":"\u65af\u7434\u9ad8\u4e3d"},{"songid":"264315","songname":"\u4e0b\u4e2a\uff0c\u8def\u53e3\uff0c\u89c1","sengername":"\u674e\u5b87\u6625"},{"songid":"264316","songname":"\u6211\u60f3\u6211\u662f\u4f60\u7684\u5973\u4eba","sengername":"\u5c1a\u96ef\u5a55"},{"songid":"264317","songname":"\u7231\u6068\u6062\u6062","sengername":"\u5468\u8fc5"},{"songid":"264318","songname":"\u6211\u5fc3\u662f\u6d77\u6d0b","sengername":"\u8521\u7434"},{"songid":"264372","songname":"\u4e0d\u8981\u5728\u6211\u5bc2\u5bde\u7684\u65f6\u5019\u8bf4\u7231\u6211","sengername":"T.R.Y"},{"songid":"265463","songname":"\u4e0d\u662f\u56e0\u4e3a\u5bc2\u5bde\u624d\u60f3\u4f60","sengername":"TRY"},{"songid":"265681","songname":"\u5e78\u798f\u62cd\u624b\u6b4c","sengername":"\u7cbe\u9009\u513f\u7ae5\u6b4c\u66f2"}]
END

Tags: php json

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2215

 广告位

↑返回顶部↑