php基于DOMDocument操作页面元素实例 原创

原创  更新时间:2023年06月27日 09:21:15   原创 投稿:shichen2014  
这篇文章主要介绍了php基于DOMDocument操作页面元素,结合实例形式分析了php使用DOMDocument进行页面元素获取与属性修改的相关操作技巧,需要的朋友可以参考下

问题

有如下代码,要求不使用正则表达式的情况下修改链接为 https://www.jb51.net/softs/ 

<p>欢迎访问<span>脚本之家</span>
    <a href="https://www.jb51.net/">软件下载</a>
</p>

解决方法

笔者使用了DOMDocument进行操作,实例如下:

<?php
header('Content-Type: text/html; charset=utf-8');
// 原始HTML代码
$cont = '<p>欢迎访问<span>脚本之家</span><a href="https://www.jb51.net/">软件下载</a></p>';
// 创建DOMDocument对象
$dom = new DOMDocument();
//$dom->encoding = 'UTF-8';
//@$dom->loadHTML($cont,LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
@$dom->loadHTML(mb_convert_encoding($cont, 'HTML-ENTITIES','UTF-8'),LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$aElem = $dom->getElementsByTagName('a');
$aElem[0]->setAttribute('href','https://www.jb51.net/softs/');
// 给a链接添加rel="nofollow"属性
$aElem[0]->setAttribute('rel','nofollow');
$content = $dom->saveHTML();
//$content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');
// 输出修改后的HTML代码
echo $content;
?>

运行上述代码,则页面源码即被修改为:

<p>欢迎访问<span>脚本之家</span><a href="https://www.jb51.net/softs/" rel="nofollow">软件下载</a></p>

这里要注意:loadHTML载入html文本的时候,需要指定编码,笔者这里使用的是mb_convert_encoding($cont, 'HTML-ENTITIES','UTF-8') 进行编码转换,另外笔者所测试网上搜索到的$dom->encoding = 'UTF-8'; 以及 $content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');​​​均未起到作用。

补充

此外,修改元素innerHtml属性也很简单,只需要设置其nodeValue值即可,上述示例继续扩展如下:

<?php
header('Content-Type: text/html; charset=utf-8');
//echo $codeid = date('YmdHis').mt_rand(1000,9999);
// 原始HTML代码
$cont = '<p>欢迎访问<span>脚本之家</span><a href="https://www.jb51.net/">软件下载</a></p>';
// 创建DOMDocument对象
$dom = new DOMDocument();
//$dom->encoding = 'UTF-8';
//@$dom->loadHTML($cont,LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
@$dom->loadHTML(mb_convert_encoding($cont, 'HTML-ENTITIES','UTF-8'),LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$aElem = $dom->getElementsByTagName('a');
$aElem[0]->setAttribute('href','https://www.jb51.net/softs/');
// 给a链接添加rel="nofollow"属性
$aElem[0]->setAttribute('rel','nofollow');
//修改span元素的innerHtml值
$spanElem = $dom->getElementsByTagName('span');
$spanElem[0]->nodeValue = '【脚本之家软件下载】===>';
$content = $dom->saveHTML();
//$content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');
// 输出修改后的HTML代码
echo $content;
?>

此时再次访问,页面元素就变成了:

<p>欢迎访问<span>【脚本之家软件下载】===&gt;</span><a href="https://www.jb51.net/softs/" rel="nofollow">软件下载</a></p>

相关文章

  • 使用Codeigniter重写insert的方法(推荐)

    使用Codeigniter重写insert的方法(推荐)

    下面小编就为大家带来一篇使用Codeigniter重写insert的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 利用curl 多线程 模拟 并发的详解

    利用curl 多线程 模拟 并发的详解

    本篇文章是对利用curl多线程模拟并发进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php+html5基于websocket实现聊天室的方法

    php+html5基于websocket实现聊天室的方法

    这篇文章主要介绍了php+html5基于websocket实现聊天室的方法,实例分析了php结合html5的websocket通讯的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 使用Zttp简化Guzzle 调用

    使用Zttp简化Guzzle 调用

    在 PHP 的项目中,如果你需要通过代码来发起 HTTP 请求,相信很多人对 GuzzleHttp 这个 Package 很熟悉,然而其实在使用 Guzzle 的时候,我们依然可以做得更简便一点的,下面我们就来看下今天的主角--Zhttp
    2017-07-07
  • 深入理解php中unset()

    深入理解php中unset()

    这篇文章主要介绍了深入理解php中unset(),对unset感兴趣的同学,可以参考下
    2021-04-04
  • 使用PHP操作ElasticSearch搜索引擎详解

    使用PHP操作ElasticSearch搜索引擎详解

    ElasticSearch是一个基于Lucene的开源搜索引擎,它提供了强大的全文搜索和分析功能,本文将深入探讨如何使用PHP操作ElasticSearch搜索引擎,包括安装ElasticSearch、使用ElasticSearch PHP客户端库进行索引管理和搜索操作等,需要的朋友可以参考下
    2024-04-04
  • PHP防止表单重复提交的几种常用方法汇总

    PHP防止表单重复提交的几种常用方法汇总

    这篇文章主要介绍了PHP防止表单重复提交的几种常用方法汇总,在PHP项目开发中有不错的实用价值,需要的朋友可以参考下
    2014-08-08
  • 如何直接访问php实例对象中的private属性详解

    如何直接访问php实例对象中的private属性详解

    这篇文章主要给大家介绍了关于如何直接访问php实例对象中private属性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • php中filter_input函数用法分析

    php中filter_input函数用法分析

    这篇文章主要介绍了php中filter_input函数用法,实例分析了采用filter_input函数过滤各种外部输入的方法,对于PHP程序设计来说具有不错的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • PHP实现抓取HTTPS内容

    PHP实现抓取HTTPS内容

    这篇文章主要介绍了PHP实现抓取HTTPS内容,以及遇到的问题的解决方法,需要的朋友可以参考下
    2014-12-12

最新评论