Заменить HTML-контент без замены тегов или атрибутов - PHP - PullRequest
0 голосов
/ 30 декабря 2018

Как я могу заменить содержимое внутри или за пределами HTML dom без замены тегов или атрибутов HTML?

например,

$txt='good <div class="good">good</div>'
$search='good';
$pattern      = '#(?!<.*?)(\b'.$search.'\b)(?![^<>]*?>)#si'; 
$replacement  = 'nice';
$txt = preg_replace($pattern, $replacement, $txt);

Так что мне бы хотелось, чтобы он вывел nice <div class="good">nice</div> и проигнорировалgood внутри любых атрибутов, потому что теги и атрибуты - это динамика, которую я не знаю, это всего лишь пример.

1 Ответ

0 голосов
/ 30 декабря 2018

Попробуйте использовать dom:

$txt='good <div class="good">good</div>';
$search = 'good';
$replace  = 'nice';

libxml_use_internal_errors(true);
$dom = new DomDocument();
$dom->loadHTML($txt, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);

foreach ($xpath->query('//text()') as $text) {
    if (trim($text->nodeValue)) {
        $text->nodeValue = str_replace($search,$replace, $text->nodeValue);
   }
}
echo $dom->saveHTML();
...