PHP与前端联通

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);
?>

结果:

image-20210715234415226

原理:

通过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!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值