<?php
/*
* 作用:将p转换为josn格式的数据
* 备注:json_encode只接受UTF-8的编码数据
*/
//echo json_encode($arr);
/*
* 作用:将p3数据从p1编码转换为p2编码
* p1: 原编码
* p2: 目标编码
* p3: 要转换编码的数据
*/
//$newData = icov("UTF-8", "GBK", $data);
/*
php组装xml串的方法
1、组装字符串
2、DomDocument
3、XMLWriter
4、SimpleXML
*/
class CPackData{
const JSON = "json";
/*
* 按json方式输出通信数据
* @param integer $code 状态码
* @param string $message 提示信息
* @param array $data 数据
* @return string
*/
public static function json($code, $message = "", $data = array()){
if (!is_numeric($code)){
return;
}
$result = array(
"code" => $code,
"message" => $message,
"data" => $data
);
echo json_encode($result);
exit;
}
/*
* 按xml方式输出通信数据
* @param integer $code 状态吗
* @param string $message 提示信息
* @param array $data 数据
* @return string
*/
public static function xmlEncode($code, $message = "", $data = array()){
if (!is_numeric($code)) {
return;
}
$result = array(
"code" => $code,
"message" => $message,
"data" => $data
);
header("Content-Type:text/xml");
$xml = "<?xml version='1.0' encoding='UTF-8' ?>";
$xml .= "<root>";
$xml .= self::xmlToEncode($result);
$xml .= "</root>";
echo $xml;
}
public static function xmlToEncode($data){
$xml = $attr = "";
foreach ($data as $key => $value) {
// 当key是数字时,数字是不能作为xml的节点名称的,所以做一个转换,即如下:
// <0>4</0> --> <item id="0">4</item>
// 备注:新取一个名称为Item的节点,将key值作为item的一个id属性值保存
if (is_numeric($key))
{
$attr = " id='{$key}'";// 注意:id前面的空格不要漏掉了,值的单引号也不要漏掉了
$key = "item";
}
$xml .= "<{$key}{$attr}>";
$xml .= is_array($value) ? self::xmlToEncode($value) : $value;// 备注:如果直接写成 $xml .= $value; 会出错
//$xml .= $value;
$xml .= "</{$key}>";
}
return $xml;
}
/*
* 按json方式输出通信数据
* @param integer $code 状态码
* @param string $message 提示信息
* @param array $data 数据
* @param $type 封装后的数据格式。 取值:json/xml
* @return string
*/
public static function commonPack($code, $message = "", $data = array(), $type = self::JSON){
if (!is_numeric($code)) {
return;
}
$type = isset($_GET["dataType"]) ? $_GET["dataType"] : self::JSON;
$result = array(
"code" => $code,
"message" => $message,
"data" => $data
);
if ($type == "json")
{
self::json($code, $message, $data);
exit;
}
else if ($type == "xml")
{
self::xmlEncode($code, $message, $data);
exit;
}
else if ($type == "debug")
{
var_dump($result);
}
else
{
// TODD: 其他业务处理
}
}
}
?>
测试代码(test.php):
<?php
require_once("./generate_data.php");
$arr = array(
"id" => 1,
"name" => "iBoost",
"type" => array(4,5,6),
"test" => array(1,45,67=>array(123,"test1"))
);
//CPackData::json(200, "数据返回成功", $arr);
//CPackData::xmlEncode(200, "success", $arr);
CPackData::commonPack(200,"success", $arr, "array");
?>
在浏览器中运行以上代码前,要先搭建好php的开发环境(此处略)
在浏览器中,
输入:http://localhost/test_json.php
则打印json串
输入:http://localhost/test_json.php?dataType=xml
则打印xml字符串
输入:http://localhost/test_json.php?dataType=debug
则打印调试信息