翼度科技»论坛 编程开发 PHP 查看内容

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

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
问题

有如下代码,要求不使用正则表达式的情况下修改链接为 https://www.jb51.net/softs/
  1. <p>欢迎访问<span>脚本之家</span>
  2.     <a href="https://www.jb51.net/">软件下载</a>
  3. </p>
复制代码
解决方法

笔者使用了DOMDocument进行操作,实例如下:
  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. // 原始HTML代码
  4. $cont = '<p>欢迎访问<span>脚本之家</span><a href="https://www.jb51.net/">软件下载</a></p>';
  5. // 创建DOMDocument对象
  6. $dom = new DOMDocument();
  7. //$dom->encoding = 'UTF-8';
  8. //@$dom->loadHTML($cont,LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
  9. @$dom->loadHTML(mb_convert_encoding($cont, 'HTML-ENTITIES','UTF-8'),LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
  10. $aElem = $dom->getElementsByTagName('a');
  11. $aElem[0]->setAttribute('href','https://www.jb51.net/softs/');
  12. // 给a链接添加rel="nofollow"属性
  13. $aElem[0]->setAttribute('rel','nofollow');
  14. $content = $dom->saveHTML();
  15. //$content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');
  16. // 输出修改后的HTML代码
  17. echo $content;
  18. ?>
复制代码
运行上述代码,则页面源码即被修改为:
  1. <p>欢迎访问<span>脚本之家</span><a href="https://www.jb51.net/softs/" rel="nofollow">软件下载</a></p>
复制代码
这里要注意:loadHTML载入html文本的时候,需要指定编码,笔者这里使用的是
  1. mb_convert_encoding($cont, 'HTML-ENTITIES','UTF-8')
复制代码
进行编码转换,另外笔者所测试网上搜索到的
  1. $dom->encoding = 'UTF-8';
复制代码
以及
  1. $content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');
复制代码
​​​均未起到作用。
补充

此外,修改元素innerHtml属性也很简单,只需要设置其nodeValue值即可,上述示例继续扩展如下:
  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. //echo $codeid = date('YmdHis').mt_rand(1000,9999);
  4. // 原始HTML代码
  5. $cont = '<p>欢迎访问<span>脚本之家</span><a href="https://www.jb51.net/">软件下载</a></p>';
  6. // 创建DOMDocument对象
  7. $dom = new DOMDocument();
  8. //$dom->encoding = 'UTF-8';
  9. //@$dom->loadHTML($cont,LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
  10. @$dom->loadHTML(mb_convert_encoding($cont, 'HTML-ENTITIES','UTF-8'),LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
  11. $aElem = $dom->getElementsByTagName('a');
  12. $aElem[0]->setAttribute('href','https://www.jb51.net/softs/');
  13. // 给a链接添加rel="nofollow"属性
  14. $aElem[0]->setAttribute('rel','nofollow');
  15. //修改span元素的innerHtml值
  16. $spanElem = $dom->getElementsByTagName('span');
  17. $spanElem[0]->nodeValue = '【脚本之家软件下载】===>';
  18. $content = $dom->saveHTML();
  19. //$content = mb_convert_encoding($content, 'UTF-8', 'ISO-8859-1');
  20. // 输出修改后的HTML代码
  21. echo $content;
  22. ?>
复制代码
此时再次访问,页面元素就变成了:
  1. <p>欢迎访问<span>【脚本之家软件下载】===&gt;</span><a href="https://www.jb51.net/softs/" rel="nofollow">软件下载</a></p>
复制代码

来源:https://www.jb51.net/program/290397k8m.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具