PHP与前端联通
记昨日书,赠一笔寂寥深处
你可知这百年 爱人只能陪半途
你且信这世上 至多好景可虚度
你且听这荒唐 春秋走来一步步
你且迷这风浪 永远二十赶朝暮
自渡
返回JSON数据
话不多说,直接上代码!
<?php
header('Content-Type:text/json;charset=utf-8');
$str = array
(
'Name'=>'小易',
'Age'=>18,
'school'=>'长安大学'
);
$jsonencode = json_encode($str,JSON_UNESCAPED_UNICODE);
echo $jsonencode;
?>
此处使用的PHP版本是PHP7.0及以上。
如何解决中文乱码问题
在json_encode()函数中加上额外参数选项进行unicode字符集解析!
$jsonencode = json_encode($str,JSON_UNESCAPED_UNICODE);
PHP与XML
PHP XML Expat
PHP XML Expat解析器,内建的Expat解析器使在PHP中处理XML文档成为可能。
XML用于描述数据,其焦点是数据是什么。
XML文件描述了数据的结构。
在XML中,没有预定义的标签,我们必须定义自己的标签。
如需读取和更新、创建和处理一个XML文档,我们需要XML解析器。
有两种基本的XML解析器类型:
- 基于树的解析器:这种解析器把XML文档转换为树形结构。它分析整篇文档,并提供了对书中元素的访问,例如文档对象模型(DOM)。
- 基于事件的解析器:将XML文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。
Expat解析器是基于事件的解析器。
基于事件的解析器集中在XML文档的内容,而不是它们的结构。
正因如此,基于事件的解析器能够比基于树的解析器更快地访问数据。
让我们来看一个XML片段:
<from>Jani</from>
基于事件地解析器把上面的XML报告为一连串地三个事件:
开始元素:from
开始CDATA部分,值:Jani
关闭元素:from
上面的XML实例包含了形式良好的XML。
不过这个实例是无效的XML,因为没有与它相关联的文档类型声明(DTD)
然而,在使用Expat解析器,并没有什么区别/
Expat是不检查有效性的解析器,忽略任何DTD。
作为一款基于事件、非验证的XML解析器,Expat快速且轻巧,十分适合PHP的Web应用程序。
XML文档必须形式良好,否则Expat会生成错误。
Expat解析器内含在PHP中,无需额外安装
看以下的XML文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
初始化XML解析器
我们要在PHP中初始化XML解析器,为不同的XML事件定义处理器,然后解析XML文件。
<?php
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "NOTE":
echo "-- Note --<br>";
break;
case "TO":
echo "To: ";
break;
case "FROM":
echo "From: ";
break;
case "HEADING":
echo "Heading: ";
break;
case "BODY":
echo "Message: ";
}
}
//Function to use at the end of an element
function stop($parser,$element_name)
{
echo "<br>";
}
//Function to use when finding character data
function char($parser,$data)
{
echo $data;
}
//Specify element handler
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen("test.xml","r");
//Read data
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
//Free the XML parser
xml_parser_free($parser);
?>
结果:
原理:
通过xml_parser_create()函数初始化XML解析器
创建配合不同事件处理程序的函数
添加xml_set_element_handler()函数来定义,当解析器遇到开始和结束标签时执行哪个函数。
添加xml_set_character_data_handler()函数来定义,当解析器遇到字符数据时执行哪个函数。
通过xml_parse()函数来解析文件"test.xml"
如果有错误的话,可以添加xml_error_string()函数把XML错误转换为文本说明
调用xml_parser_free()函数来释放分配给xml_parser_create()函数的内存/
XML DOM
内建的DOM解析器使在PHP中处理XML文档成为可能。
什么是DOM?
W3C DOM提供了针对HTML和XML文档的标准对象集,以及用于访问和操作这些文档的标准接口。
W3C DOM被分为不同的部分(Core,XML和HTML)和不同的级别(DOM Level 1/2/3)
- Core DOM-为任何结构化文档定义标准的对象集
- XML DOM-为XML文档定义标准的对象集
- HTML-DOM-为HTML文档定义标准的对象集
XML解析
如需读取和更新-创建和处理-一个XML文档,我们需要XML解析器。
- 基于树的解析器:这种解析器把 XML 文档转换为树型结构。它分析整篇文档,并提供了对树中元素的访问,例如文档对象模型 (DOM)。
- 基于时间的解析器:将 XML 文档视为一系列的事件。当某个具体的事件发生时,解析器会调用函数来处理。
DOM 解析器是基于树的解析器。
使用的还是前面的test.xml文件。
加载和输出XML
我们需要初始化 XML 解析器,加载 XML,并把它输出:
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
print $xmlDoc->saveXML();
?>
上面的实例创建了一个 DOMDocument-Object,并把 “note.xml” 中的 XML 载入这个文档对象中。
saveXML() 函数把内部 XML 文档放入一个字符串,这样我们就可以输出它。
遍历XML
我们要初始化XML解析器,加载XML,并遍历元素的所有元素。
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");
$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
{
print $item->nodeName . " = " . $item->nodeValue . "<br>";
}
?>
当 XML 生成时,它通常会在节点之间包含空白。XML DOM 解析器把它们当作普通的元素,如果我们不注意它们,有时会产生问题。
XML SimpleXML
PHP SimpleXML,PHP SimpleXML 处理最普通的 XML 任务,其余的任务则交由其它扩展处理。 SimpleXML 是 PHP 5 中的新特性。 SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。 与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。
PHP SimpleXML 处理最普通的 XML 任务,其余的任务则交由其它扩展处理。
什么是 PHP SimpleXML?
SimpleXML 是 PHP 5 中的新特性。
SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。
与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。
SimpleXML 可把 XML 文档(或 XML 字符串)转换为对象,比如:
- 元素被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时,它们会被置于数组中。
- 属性通过使用关联数组进行访问,其中的索引对应属性名称。
- 元素内部的文本被转换为字符串。如果一个元素拥有多个文本节点,则按照它们被找到的顺序进行排列。
当执行类似下列的基础任务时,SimpleXML 使用起来非常快捷:
- 读取/提取 XML 文件/字符串的数据
- 编辑文本节点或属性
然而,在处理高级 XML 时,比如命名空间,最好使用 Expat 解析器或 XML DOM。
安装
从 PHP 5 开始,SimpleXML 函数是 PHP 核心的组成部分。无需安装就可以使用这些函数。
PHP SimpleXML 实例
假设我们有如下的 XML 文件,“note.xml”:
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
现在我们想要输出上面的 XML 文件的不同信息:
实例 1
输出 $xml 变量(是 SimpleXMLElement 对象)的键和元素:
<?php
$xml=simplexml_load_file("note.xml");
print_r($xml);
?>
以上代码将输出:
SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder
[body] => Don't forget me this weekend! )
实例 2
输出 XML 文件中每个元素的数据:
<?php
$xml=simplexml_load_file("note.xml");
echo $xml->to . "<br>";
echo $xml->from . "<br>";
echo $xml->heading . "<br>";
echo
$xml->body;
?>
以上代码将输出:
Tove
Jani
Reminder
Don't forget me this weekend!
实例 3
输出每个子节点的元素名称和数据:
<?php
$xml=simplexml_load_file("note.xml");
echo $xml->getName() . "<br>";
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br>";
}
?>
以上代码将输出:
note
to: Tove
from: Jani
heading: Reminder
body: Don't forget me this weekend!
Tove
Jani
Reminder
Don't forget me this weekend!
实例 3
输出每个子节点的元素名称和数据:
<?php
$xml=simplexml_load_file("note.xml");
echo $xml->getName() . "<br>";
foreach($xml->children() as $child)
{
echo $child->getName() . ": " . $child . "<br>";
}
?>
以上代码将输出:
note
to: Tove
from: Jani
heading: Reminder
body: Don't forget me this weekend!