欢迎来到站长教程网!

PHP教程

当前位置:主页 > 网络编程 > PHP教程 >

php利用自带dom扩展举办元素匹配的道理理会

时间:2021-05-05|栏目:PHP教程|点击:

DOMDocument

php提供了很是好用的理会html和xml文档的扩展库DOM,利用这个库可以很是高效的举办html和xml文档的理会,它的道理就是通过寻找首尾匹配对来举办文档的理会。

从上面的阐明可以看出,假如首位不匹配,大概就会导致一些错误的呈现,因此,这个时候我们需要配置

libxml_use_internal_errors(true);

来举办错误的屏蔽,让它可以理会整个文档。

理会html根基用法

$dom = new \DOMDocument;
$content = htmlspecialchars_decode($content);
libxml_use_internal_errors(true);
$content = mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8');
$dom->loadHTML($content);

$content是要理会的html字符串,个中我们对它举办了转义,因为大概含有实体集,然后我们有举办了编码的转换,因为大概文档不是utf-8名目标,会导致日文,法文等文字乱码。

获取元素

$a = $dom->getElementsByTagName('a');
$p = $dom->getElementsByTagName('p');

遍历元素

$elements = $dom->getElementsByTagName('a');
foreach ($elements as $element) {
  $element->textContent = '替换成其它的文字';
}

通过上面的轮回,可以将全部a标签的文字替换掉。

元素嵌套

有些时候,html会嵌套许多层,好比

<div>
<p>
<a href="xxx" rel="external nofollow" >我是文字</a>
</p>
<p>
内容替换
</p>
</div>

假如我们想要对p标签文字举办替换的化,而且不想要替换含有子元素的内容,就是这里的a标签不想替换,下面的语句不可以或许办理我们的问题:

$elements = $dom->getElementsByTagName('p');
foreach ($elements as $element) {
  if($element->hasChildNodes()){
    $element->textContent = 'p标签内容替换';
  }
}

上面的代会将a标签的内容也替换掉,这不是我们想要的功效,因为hasChildNodes()这个函数暗示的含有内容,无论它是标签照旧文字,它都是返回true的,除非它是空标签,譬喻

它才会返回false.

所以我们需要本身封装一个函数举办查抄是否含有嵌套标签。

function hasChild($element, $tags)
{
  foreach($tags as $v){
  $elements = $element->getElementsByTagName($v);

  if($elements->length){
  return true;
  }

  }
  return false;
}
$tags = array('title','h1','h2','h3','h4','h5','a','p','dd','img');  

$elements = $dom->getElementsByTagName('p');
foreach ($elements as $element) {
  if(hasChild($element, $tags)){
    $element->textContent = 'p标签内容替换';
  }
}

通过我们本身封装的函数,就可以判定出$dom的node节点是否含有子标签。

总结

到此这篇关于php利用自带dom扩展举办元素匹配的文章就先容到这了,更多相关php元素匹配内容请搜索本网站以前的文章或继承欣赏下面的相关文章但愿各人今后多多支持本网站!

您大概感乐趣的文章:

上一篇:PHP实现图片防盗链破解操纵示例【办理图片防盗链问题/反向署理】

栏    目:PHP教程

下一篇:PHP实现获取文件mime范例多种要领理会

本文标题:php利用自带dom扩展举办元素匹配的道理理会

本文地址:www.jiaocheng88.com.cn/PHPjiaocheng/61987.html

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:584415406 | 邮箱:584415406#qq.com(#换成@)

Copyright © 2015-2020 小白站长教程网 版权所有 苏ICP备20040415号-3