naser
naser

Reputation: 4437

select tag in php and get href

i want get all link in page by class "page1" in php. the same code in jquery

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

can do that in php?

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

this code get all href in the $page_g but its not work for class="page1". i want only all href in $page_g by class="page1" can help me for optimize reqular ex or other way? for example

$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>";

i want return only /?s=cache:16001429:office+s01e02 tnx

Upvotes: 0

Views: 1226

Answers (4)

Aurimas
Aurimas

Reputation: 2493

DOM is preferred to be used here, as regex is difficult to maintain if underlying HTML changes, besides, DOM can deal with invalid HTML and provides you access to other HTML parsing related tools.

So, assuming that have a file that contains HTML, and you are searching for classes, this could be the way to go:

$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
}

Upvotes: 0

mario
mario

Reputation: 145512

You lack the expertise to use a regular expression for that. Hencewhy using DOMdocument is the advisable solution here. If you want to have a simpler API then use the jQuery-lookalikes phpQuery or QueryPath:

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

Upvotes: 3

Michael Berkowski
Michael Berkowski

Reputation: 270775

Edit Edited since you clarified the question.

To get all <a> links with the class .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
  }
}

Upvotes: 2

Headshota
Headshota

Reputation: 21449

Use DomDocument to parse HTML page, here's a tutorial:

Tutorial

Upvotes: 0

Related Questions