#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>
тегов с помощью PHP2. Вы имеете в виду
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
}