2014-04-05 2 views
0

검색 용 메타 태그를 만들고 그래프를 엽니 다.PHP를 사용하여 내부 HTML을 잡아

메타 설명 태그의 경우 페이지에서 두 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을하지 당신은 "협회"가 무슨 뜻인지 확실? 설명 값은 페이지에서 두 html 요소의 내용을 연결 한 것입니다. "서랍 세트"+ "123 Main St" –

+0

페이지에 html 요소가 두 개 이상 있습니까? –

답변

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);