2015-02-02 4 views
0

Я пытаюсь реализовать фильтр поиска в проекте Laravel. Поскольку я в настоящее время храню все содержимое страницы вместе с помощью редактора WYSIWYG, проблема, с которой я сейчас сталкиваюсь, заключается в том, как получить только те «р» в содержимом страниц, которые я извлекаю из базы данных. Я уже пробовал несколько вещей, но ничего не работает. Может кто-то указать мне верное направление? Вот что я пытаюсь до сих пор:Получить элемент по имени тега в php

<div id="page-content" class="container"> 

    @foreach($searchResults as $searchResult) 
    <div class="searchResult_div col-xs-12"> 

     <div class="col-xs-9 col-sm-10 search-result-body"> 

     <?php 
     $sr = HTML::decode($searchResult['body'], 450, "..."); 
     $dom = new DOMDocument(); 
     @$dom->loadHTML($sr); 
     $sr_text = $dom->getElementsByTagName("p"); 

     echo $sr_text; 
     ?> 

     </div> 

    </div> 
    @endforeach 

</div> 

Ошибка: Объект класса список DOMNodeList не может быть преобразован в строку (Вид:/Users/ruirosa/Документы/AptanaStudio3Workspace/Marave4/приложение/просмотров/поиск/поиск .blade.php)

+2

Вы пробовали 'var_dump ($ sr_text)'? Вы пытались найти «PHP Получить контент из элемента DOM»? Если бы вы это сделали, вы найдете это: http://stackoverflow.com/questions/6859527/how-to-get-tag-content-using-domdocument – Styphon

+0

Спасибо Стифону, ты меня на правильном пути. –

ответ

0

было бы работа:

<?php 

$html = <<<HTML 
<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
    <div id="container"> 
     <p>text content</p> 
     <section> 
      <div> 
       <p>inner text</p> 
      </div> 
     </section> 
    </div> 
</body> 
</html> 
HTML; 


$dom = new DomDocument(); 
@$dom->loadHTML($html); 
$para = $dom->getElementsByTagName('p'); #DOMNodeList 


if ($para instanceof DOMNodeList) { 
    foreach ($para as $node) { 
     # $node is a DOMElement instance 
     printf ("Node name: %s\n", $node->nodeName); 
     printf ("Node value: %s\n", $node->nodeValue); 
    } 
} 

Выход:
enter image description here

Кроме того, как «$ sr_te xt "- это итерируемый/traversable объект, который вы не можете распечатать. Вы должны повторить его.

Прочитайте документацию:

The DOMNodeList class
Traversable Interface
Interface NodeList (from W3C WD-DOM-Level-3)

Смежные вопросы