ДОМДокумент
PHP предоставляет очень простую в использовании библиотеку расширений DOM для анализа HTML и XML-документов. Используя эту библиотеку, вы можете эффективно анализировать 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 ='replace with other text ';
}В ходе описанного выше цикла вы можете заменить весь текст тега.
Вложенность элементов
Иногда HTML будет вложен во множество слоев, таких как
I am a text
Content substitution
Если мы хотим заменить текст тега P и не хотим заменять содержимое подэлементами, то есть тег a здесь не хочет заменяться. Следующее утверждение не может решить нашу проблему:
$elements = $dom->getElementsByTagName('p');
foreach ($elements as $element) {
if($element->hasChildNodes()){
$element > textcontent ='p tag content replacement ';
}
}Вышеприведенное поколение также заменит содержимое тега 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 tag content replacement ';
}
}С помощью наших собственных инкапсулированных функций мы можем определить, содержит ли узел узла $DOM дочерний тег.
резюме
Эта статья о PHP, использующем расширение DOM для сопоставления элементов, будет представлена здесь. Для получения более релевантного контента, соответствующего элементам PHP, пожалуйста, найдите предыдущие статьи developeppaer или продолжайте просматривать соответствующие статьи ниже. Я надеюсь, что вы сможете больше поддерживать developeppaer в будущем!