выберите тег в php и получите href

#php

#php

Вопрос:

я хочу получить все ссылки на странице по классу «page1» в php. тот же код в jquery

 $("a#page1").echo(function()
{
});
  

можно ли это сделать в php?

 $pattern = '`.*?((http|ftp)://[w#$amp; ,/:;=?@%.-] )[^w#$amp; ,/:;=?@%.-]*?`i';
preg_match_all($pattern,$page_g,$matches);
  

этот код возвращает все href в $ page_g, но он не работает для class=»page1″.
я хочу только все href в $ page_g по class =»page1″
можете ли вы помочь мне оптимизировать reqular ex или другим способом?
например

 $page_g="<a href="/?s=cache:16001429:office s01e02" title="" class="big">the <strong>office</strong> us s01 05 xvid mu</a> <a href="asd.com" class="a">asd</a>";
  

я хочу вернуть только /?s=cache: 16001429:office s01e02
tnx

Комментарии:

1. Я знаю, что этот точный вопрос задавался в последние несколько дней, но я не могу включить его в поиске. Кто-нибудь еще может его найти? Речь шла о выборе всех <a> тегов с помощью PHP

2. Вы имеете в виду a.page1 вместо a#page1 ?

Ответ №1:

Вам не хватает опыта, чтобы использовать регулярное выражение для этого. Следовательно, использование DOMDocument является здесь желательным решением. Если вы хотите иметь более простой API, тогда используйте jQuery-аналоги phpQuery или QueryPath :

 $link = qp($html)->find("a#page1")->attr("href");
print $link;
  

Ответ №2:

Редактировать Отредактировано, поскольку вы прояснили вопрос.

Чтобы получить все <a> ссылки с классом .page1 :

 // Load the HTML from a file
$your_HTML_string = file_get_contents("html_filename.html");

$doc = new DOMDocument();
$doc->loadHTML($your_HTML_string);

// Then select all <a> tags under #page1
$a_links = $doc->getElementsByTagName("a");

foreach ($a_links as $link) {
  // If they have more than one class, 
  // you'll need to use (strpos($link->getAttribute("class"), "page1") >=0)
  // instead of == "page1"

  if ($link->getAttribute("class") == "page1") {
    // do something
  }
}
  

Комментарии:

1. вместо @naser fopen() , для чего требуется fread() и цикл while, загрузите его с помощью file_get_contents() . Это возвращает его в виде строки, которая затем используется как $your_HTML_string в моем примере. Смотрите редактирование выше.

Ответ №3:

Используйте DOMDocument для синтаксического анализа HTML-страницы, вот руководство:

Учебник

Ответ №4:

Здесь предпочтительнее использовать DOM, поскольку регулярное выражение сложно поддерживать, если базовый HTML изменяется, кроме того, DOM может обрабатывать недопустимый HTML и предоставляет вам доступ к другим инструментам, связанным с синтаксическим анализом HTML.

Итак, предполагая, что у вас есть файл, содержащий HTML, и вы ищете классы, это может быть правильным решением:

 $doc = new DOMDocument;
$doc->load(PATH_TO_YOUR_FILE);
//we will use Xpath to find all a containing your class, as a tag can have more than one class and it's just easier to do it with Xpath. 
$xpath = new DOMXpath($doc);
$list = $xpath->query("//a[contains(@class, 'page1')]"); 
foreach ($list as $a_tag) {
    $href = $a_tag->getAttribute('href');
    //do something
}