получить атрибут src изображения на основе класса или идентификатора - PullRequest
2 голосов
/ 06 июня 2011

Я хочу получить изображение в зависимости от класса или идентификатора.Ex.На html странице есть много <img src="url">, но только у одного есть класс или идентификатор: <img src="url" class="image" or id="image"> Как получить правильный атрибут src, у которого есть определенный класс или идентификатор?Pls regex not dom

Я собираюсь объяснить вам, почему я не хочу использовать dom или другие библиотеки, потому что я получаю html-страницу с другого сайта, который не позволяет fopen или _file_get_contents или DOM, но только Curl может сделать это,Конечно, у меня есть причина, по которой я не использую эти библиотеки, например simplehtmldom, потому что иногда невозможно получить удаленную html-страницу, и я должен сам создать несколько сценариев.

Ответы [ 2 ]

7 голосов
/ 06 июня 2011

Вы говорите, что не хотите использовать библиотеки DOM, потому что вам нужно использовать cURL.Это нормально - DOMDocument и simple_xml_load_string оба принимают строковые аргументы.Таким образом, вы можете получить свою строку из cURL и загрузить ее в свою библиотеку DOM.

Например:

$html = curl_exec($ch); // assuming CURLOPT_RETURNTRANSFER

$dom = new DOMDocument;
$dom->loadHTML($html); // load the string from cURL into the DOMDocument object

// using an ID
$el = $dom->getElementById('image');

// using a class
$xpath = new DOMXPath($dom);
$els = $xpath->query('//img[@class="image"]');
$el = $els->item(0);

$src = $el->getAttribute('src');
4 голосов
/ 06 июня 2011

, если вам абсолютно необходимо использовать регулярные выражения, здесь это

<img(?:[^>]+src="(.+?)"[^>]+(?:id|class)="image"|[^>]+(?:id|class)="image"[^>]+src="(.+?)")

Тем не менее, правильный способ сделать это - использовать jQuery или подобный метод анализа DOM. Не используйте регулярное выражение, если у вас нет очень веских причин, потому что он пропустит много случаев (например, он не будет работать, если вместо двойных кавычек используются одинарные кавычки или если перед «изображением» есть пробелы).

...