Как получить HTML-тег из строки в PHP? - PullRequest
2 голосов
/ 09 мая 2011

У меня есть вывод html, который я извлекаю из ленты RSS, это примерно так:

<div>
    <p>
        Some text
    </p>
    <iframe src="http://www.source.com"></iframe>
</div>

Проблема в том, что мне нужен только атрибут "src" тега iframe. Есть ли способ получить его с помощью PHP? Regex может быть?

Заранее спасибо!

Ответы [ 4 ]

3 голосов
/ 09 мая 2011

Если вы последовательно получаете только те данные, которые перечислены выше, вы можете использовать простую подстроку, используя строковые позиции src=" и "><iframe, чтобы указать, какую подстроку вы хотите:

$html = '<div><p>Some text</p><iframe src="http://www.source.com"></iframe></div>';

$start = strpos($html, 'src="') + 5;
$length = strpos($html, '"></iframe') - $start;
$src = substr($html, $start, $length);

echo $src;

РЕДАКТИРОВАТЬ - исправил код и разбил на несколько строк. Это легко может быть однострочно, но - я думаю, что это будет легче понять, если я разбью на несколько строк.

2 голосов
/ 09 мая 2011

Я бы порекомендовал DOMDocument или SimpleXML .

Что-то подобное может дать вам идею.

var_dump(simplexml_load_string($rss_feed));
0 голосов
/ 09 мая 2011

Вы можете проанализировать этот вывод с помощью небольшого сценария Perl для командной строки. Это может быть достаточно надежным, в зависимости от того, насколько часто вы делаете регулярное выражение.

Например,

$command = "echo your_html_output | perl -pe 's/src=\"(.*)\"/$1/'"; # Capture what is in between src=" and the " (the closing quote)

$output = shell_exec("$command");

0 голосов
/ 09 мая 2011

Я не эксперт по регулярным выражениям, но альтернативным способом было бы использовать explode на отметках " и получить array[1] следующим образом:

$rssFeed = '<div>
    <p>
        Some text
    </p>
    <iframe src="http://www.source.com"></iframe>
</div>';

$rssArray = explode('"', $rssFeed);

echo $rssArray[1];

Это требует, чтобы ваш RSS-канал был очень согласованным, хотя, если бы часть "Некоторый текст" содержала " отметок, это могло бы привести к ошибкам, и вы получили бы неправильную строку.

Вы можете просмотреть массив для всего, начиная с http или www, чтобы обойти ошибки, но опять же, он требует очень последовательной подачи RSS, так что вы должны сами оценить, будет ли это работать достаточно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...