<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
/**
* Converts to and from JSON format.
*
* 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.
* This feature can also be found in Python. 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, TCL, and many others. These properties make JSON an
* ideal data-interchange language.
*
* This package provides a simple encoder and decoder for JSON notation. It
* is intended for use with client-side Javascript applications that make
* use of HTTPRequest to perform server communication functions - data can
* be encoded into JSON notation for use in a client-side javascript, or
* decoded from incoming Javascript requests. JSON format is native to
* Javascript, and can be directly eval()'ed with no further parsing
* overhead
*
* All strings should be in ASCII or UTF-8 format!
*
* LICENSE: Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met: Redistributions of source code must retain the
* above copyright notice, this list of conditions and the following
* disclaimer. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* @category
* @package Services_JSON
* @author Michal Migurski <mike-json@teczno.com>
* @author Matt Knapp <mdknapp[at]gmail[dot]com>
* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
* @copyright 2005 Michal Migurski
* @license http://www.opensource.org/licenses/bsd-license.php
* @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
*/
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_SLICE', 1);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_STR', 2);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_ARR', 4);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_OBJ', 8);
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_CMT', 16);
/**
* Behavior switch for Services_JSON::decode()
*/
define('SERVICES_JSON_LOOSE_TYPE', 10);
/**
* Behavior switch for Services_JSON::decode()
*/
define('SERVICES_JSON_STRICT_TYPE', 11);
/**
* Converts to and from JSON format.
*
* Brief example of use:
*
* <code>
* // create a new instance of Services_JSON
* $json = new Services_JSON();
*
* // convert a complexe value to JSON notation, and send it to the browser
* $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
* $output = $json->encode($value);
*
* print($output);
* // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
*
* // accept incoming POST data, assumed to be in JSON notation
* $input = file_get_contents('php://input', 1000000);
* $value = $json->decode($input);
* </code>
*/
class Services_JSON
{
/**
* constructs a new JSON instance
*
* @param int $use object behavior: when encoding or decoding,
* be loose or strict about object/array usage
*
* possible values:
* - SERVICES_JSON_STRICT_TYPE: strict typing, default.
* "{...}" syntax creates objects in decode().
* - SERVICES_JSON_LOOSE_TYPE: loose typing.
* "{...}" syntax creates associative arrays in decode().
*/
function Services_JSON($use = SERVICES_JSON_STRICT_TYPE)
{
$this->use = $use;
}
/**
* convert a string from one UTF-16 char to one UTF-8 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf16 UTF-16 character
* @return string UTF-8 character
* @access private
*/
function utf162utf8($utf16)
{
// oh please oh please oh please oh please oh please
if(function_exists('mb_convert_encoding'))
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
$bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
switch(true) {
case ((0x7F & $bytes) == $bytes):
// this case should never be reached, because we are in ASCII range
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0x7F & $bytes);
case (0x07FF & $bytes) == $bytes:
// return a 2-byte UTF-8 character
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0xC0 | (($bytes >> 6) & 0x1F))
. chr(0x80 | ($bytes & 0x3F));
case (0xFFFF & $bytes) == $bytes:
// return a 3-byte UTF-8 character
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0xE0 | (($bytes >> 12) & 0x0F))
. chr(0x80 | (($bytes >> 6) & 0x3F))
. chr(0x80 | ($bytes & 0x3F));
}
// ignoring UTF-32 for now, sorry
return '';
}
/**
* convert a string from one UTF-8 char to one UTF-16 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf8 UTF-8 character
* @return string UTF-16 character
* @access private
*/
function utf82utf16($utf8)
{
// oh please oh please oh please oh please oh please
if(function_exists('mb_convert_encoding'))
return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
switch(strlen($utf8)) {
case 1:
// this case should never be reached, because we are in ASCII range
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return $utf8;
case 2:
// return a UTF-16 character from a 2-byte UTF-8 char
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0x07 & (ord($utf8{0}) >> 2))
. chr((0xC0 & (ord($utf8{0}) << 6))
| (0x3F & ord($utf8{1})));
case 3:
// return a UTF-16 character from a 3-byte UTF-8 char
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#ut
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
dojo 树形列表 dijit.tree (1215个子文件)
upload.cgi 1KB
dijit.css 31KB
TabContainer.css 10KB
TabContainer.css 10KB
Dialog.css 5KB
TabContainer.css 5KB
dojo.css 5KB
Dialog.css 4KB
Dialog.css 4KB
Button.css 4KB
Common.css 4KB
firebug.css 4KB
Slider.css 4KB
Slider.css 4KB
Slider.css 4KB
Editor.css 3KB
Editor.css 3KB
Editor.css 3KB
Calendar.css 3KB
Calendar.css 3KB
Calendar.css 3KB
Button.css 3KB
Button.css 3KB
Common.css 3KB
Common.css 3KB
Toolbar.css 2KB
dijitTests.css 2KB
Toolbar.css 2KB
Toolbar.css 2KB
Common.css 2KB
TitlePane.css 2KB
TitlePane.css 2KB
dijit_rtl.css 2KB
dnd.css 2KB
Common.css 2KB
Tree.css 2KB
Tree.css 2KB
Common.css 2KB
Tree.css 2KB
Menu.css 2KB
Menu.css 2KB
TitlePane.css 2KB
Menu.css 2KB
Checkbox.css 2KB
Checkbox.css 2KB
RadioButton.css 2KB
RadioButton.css 2KB
tundra.css 1KB
AccordionContainer.css 1KB
AccordionContainer.css 1KB
RadioButton.css 1KB
Checkbox.css 1KB
TimePicker.css 1KB
nihilo.css 1KB
soria.css 1KB
TimePicker.css 1KB
TimePicker.css 1KB
dndDefault.css 1KB
AccordionContainer.css 1KB
Slider_rtl.css 1KB
BorderContainer.css 1KB
BorderContainer.css 1KB
Slider_rtl.css 1KB
TabContainer_rtl.css 971B
TabContainer_rtl.css 959B
Tree_rtl.css 948B
Tree_rtl.css 941B
ProgressBar.css 917B
nihilo_rtl.css 903B
soria_rtl.css 903B
BorderContainer.css 890B
ProgressBar.css 887B
ProgressBar.css 885B
TabContainer_rtl.css 821B
Tree_rtl.css 816B
SplitContainer.css 802B
Slider_rtl.css 784B
SplitContainer.css 760B
SplitContainer.css 748B
ContentPane.css 577B
ContentPane.css 577B
ContentPane.css 572B
ComboBox.css 427B
ComboBox.css 424B
Editor_rtl.css 400B
Editor_rtl.css 399B
Editor_rtl.css 396B
AccordionContainer_rtl.css 262B
AccordionContainer_rtl.css 260B
Common_rtl.css 254B
Common_rtl.css 252B
Common_rtl.css 212B
TitlePane_rtl.css 197B
TitlePane_rtl.css 195B
Menu_rtl.css 194B
Menu_rtl.css 194B
Menu_rtl.css 183B
Calendar_rtl.css 171B
Calendar_rtl.css 171B
Calendar_rtl.css 169B
共 1215 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13
资源评论
- xubin_2014-07-20不错资源,不过还是去官网学习比较好
- damon&Wu2014-08-20不行啊 加点注释吧
- peter12062015-04-03有点问题,不是很好用
- mjy@#¥&20122014-05-09不能运行啊
- JB_Goingdown2012-12-16添加借点似乎只能加第一个节点
w2y0xy0sf5z
- 粉丝: 4
- 资源: 26
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功