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>

相关文章

  • php数组索引与键值操作技巧实例分析

    php数组索引与键值操作技巧实例分析

    这篇文章主要介绍了php数组索引与键值操作技巧,涉及php数组的遍历与索引、键值操作的相关技巧,需要的朋友可以参考下
    2015-06-06
  • PHP中=>和->以及::符号的用法

    PHP中=>和->以及::符号的用法

    讲完了php基础运算符,下面再讲一下,php新手经常碰到的问题,->、=> 和 :: 这三个家伙是什么分别都是做什么的啊!看着就很晕
    2021-09-09
  • PHP实现逐行删除文件右侧空格的方法

    PHP实现逐行删除文件右侧空格的方法

    这篇文章主要介绍了PHP实现逐行删除文件右侧空格的方法,涉及php针对文件的打开、逐行读取、rtrim函数删除右侧空格及文件保存等技巧,需要的朋友可以参考下
    2015-12-12
  • 几行代码轻松实现PHP文件打包下载zip

    几行代码轻松实现PHP文件打包下载zip

    这篇文章主要为大家详细介绍了使用PHP自带zlib函数 ,轻松实现PHP文件打包下载zip,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Laravel Eloquent ORM高级部分解析

    Laravel Eloquent ORM高级部分解析

    这篇文章主要为大家介绍了Laravel Eloquent ORM高级部分解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • PHP @ at 记号的作用示例介绍

    PHP @ at 记号的作用示例介绍

    @符号一直不知道是什么意思,其实它是错误控制符,即即使出现错误,也无视出现的错误信息,继续执行下边的代码
    2014-10-10
  • php的POSIX 函数以及进程测试的深入分析

    php的POSIX 函数以及进程测试的深入分析

    本篇文章是对php的POSIX函数以及进程测试进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php中sort函数排序知识点总结

    php中sort函数排序知识点总结

    在本篇文章里小编给大家分享的是一篇关于php中sort函数排序知识点总结内容,有兴趣的朋友们可以参考下。
    2021-01-01
  • PHP实现HTML页面静态化的方法

    PHP实现HTML页面静态化的方法

    这篇文章主要介绍了PHP实现HTML页面静态化的方法,分享了静态处理的方法,静态处理后的优势,并提供了多种静态的方法,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • PHP读写文件高并发处理操作实例详解

    PHP读写文件高并发处理操作实例详解

    这篇文章主要介绍了PHP读写文件高并发处理操作,结合实例形式较为详细的分析了php高并发访问读写操作相关处理操作技巧,需要的朋友可以参考下
    2018-03-03

最新评论