php基于DOMDocument操作页面元素实例 原创
投稿: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>【脚本之家软件下载】===></span><a href="https://www.jb51.net/softs/" rel="nofollow">软件下载</a></p>
您可能感兴趣的文章:
- PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
- 如何解决php domdocument找不到的问题
- PHP中使用DOMDocument来处理HTML、XML文档的示例
- PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
- PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
- PHP基于DOMDocument解析和生成xml的方法分析
- PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
- php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
- PHP XML操作类DOMDocument