首页 > 解决方案 > PHP Simple HTML Dom Parser,跳过某些元素的单词替换

问题描述

我正在尝试使用 php dom 方法添加到关键字的链接,但问题是它在它可以找到的所有实例上添加链接。当关键字已经有链接或者它在 img alt="" 或 title="" 属性中时,我想跳过,类似地在任何其他标签或 css 类中。

这个问题与这个问题非常相似。 PHP 简单的 html dom 解析器 - 查找单词

我用 $tagsToExclude 数组尝试了上一篇文章中提到的答案,但这不起作用。

这是代码。

<?php
require_once 'simple_html_dom.php';

$html = new simple_html_dom();
$html = str_get_html('<html><body><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>

<p>Don\'t add link on Lorems</p>

<p>Add on Lorem again.</p>

<p>An existing link on <a href="http://lorem.net">Lorem</a></p>


<img src="Lorem.jpg" alt="Lorem text" title="Lorem image"></body></html>');


$nodes = $html->find('*');

$tagsToExclude = [
    "a",
    "img"
];

foreach($nodes as $node) {

    $keyword = 'Lorem';
    $link = '<a href="http://example.com">'.$keyword.'</a>';

    if (!in_array($node->tag, $tagsToExclude)) {

        if(strpos($node->innertext, $keyword) !== false) {
            $node->innertext = preg_replace('/\b'.$keyword.'\b/', $link, $node->innertext);
        }
    }
}

echo $html->outertext;
?>

谢谢

标签: phppreg-replacesimple-html-dom

解决方案


推荐阅读