Захватить внутренний HTML с помощью PHP

0

Я создаю метатеги для поиска и открытия графика.

Для тега meta description я хотел бы установить значение динамически на основе конкатенации содержимого двух элементов html на странице.

Например, если это фрагмент моего html:

<div class="report-description-text">
            <h5>Description</h5>
            Set of drawers          
<br/>

И еще один фрагмент в другом месте документа:

<p class="report-when-where">
            <span class="r_date">09:58 Apr 5 2014 </span>
            <span class="r_location">123 main St, Toronto, ON, Canada</span>
                    </p>

Мне бы хотелось, чтобы мой метатег:

echo '    
<meta name="description" content="Set of drawers at 123 main St, Toronto, ON, Canada" />

Немного новое для php и кода в целом. Я также провел некоторое исследование на этом сайте и нашел ответ в виде использования DOMinnerHTML и функции foreach.

Это самый простой способ? Как мне это сделать?

  • 0
    @CasimiretHippolyte не уверены, что вы подразумеваете под "ассоциацией"? Значением description будет объединение содержимого двух HTML-элементов на странице. "Набор выдвижных ящиков" + "123 Main St"
  • 0
    Есть ли более одной пары HTML-элементов на странице?
Теги:
innerhtml

1 ответ

2

Способ использования DOMDocument и XPath:

$dom = new DOMDocument();
@$dom->loadHTML($html);

$xpath = new DOMXPath($dom);

$query = '//div[@class = "report-description-text"]/h5[.="Description"]'
       . '/following-sibling::text()[1]';
$description = trim($xpath->query($query)->item(0)->textContent);

$query = '//p[@class = "report-when-where"]/span[@class = "r_location"]/text()';
$location = trim($xpath->query($query)->item(0)->textContent);

$meta = $dom->createElement('meta');
$meta->setAttribute('name', 'Description');
$meta->setAttribute('content', $description . ' at ' . $location);

// only needed if the head tag doesn't exist
if (!$dom->getElementsByTagName('head')->item(0)):
    $head = $dom->createElement('head');
    $dom->getElementsByTagName('html')->item(0)->insertBefore($head,
        $dom->getElementsByTagName('body')->item(0));
endif;

$dom->getElementsByTagName('head')->item(0)->appendChild($meta);

$result = $dom->saveHTML(); // or saveXML if you want xhtml

echo htmlspecialchars($result);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню