Извлечение ссылок из HTML - PullRequest
       2

Извлечение ссылок из HTML

1 голос
/ 26 ноября 2010
    <?php
    $cont = '<div class="video-image">
        <a href="video/TI - No+Matter+What/_CHheEQe9M8/" title="23">
            <img src="http://i.ytimg.com/vi/_CHheEQe9M8/3.jpg" alt="TI" width="130" height="78"/>
        </a>
        <span class="video-title"><a href="video/TI - No+Matter+What/_CHheEQe9M8/" title="sdg">No Matter What</a></span>
        <span class="video-artist"><a href="video/TI - No+Matter+What/_CHheEQe9M8/" title="ss" class="ellipsis">TI</a></span>
    </div>';

    if (preg_match_all('#<a href="([^>]*)"#iU', $cont, $arr))
    {
        foreach ($arr[1] as $value)
        {
            var_dump($value);
            $cont = preg_replace('#' . preg_quote($value, '#') . '#iU', 'http://site.com/' . $value, $cont);
        }
    }

    echo $cont;

Возвращено: http://site.com/http://site.com/http://site.com/video/TI - No+Matter+What/_CHheEQe9M8/

Почему? Я хочу: http://site.com/video/TI - No+Matter+What/_CHheEQe9M8/ Как это сделать? извините за плохой английский

EDIT

$dom = new DOMDocument;
    $dom->loadHTML($cont);
    foreach( $dom->getElementsByTagName('a') as $node )
    {
        $cont = preg_replace('#' . preg_quote($node->getAttribute('href'), '#') . '#', "http://site.com/" . $node->getAttribute('href'), $cont);
    }    
    echo $cont;

Этот код возвращает http://site.com/http://site.com/http://site.com/video/TI - No+Matter+What/_CHheEQe9M8/ тоже ...

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010
$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
$dom->loadXml($xhtml);
foreach( $dom->getElementsByTagName('a') as $node )
{
    $node->setAttribute(
        'href', 
        "http://site.com/" . $node->getAttribute('href')
    );
}
$dom->formatOutput = TRUE;
echo $dom->saveXML($dom->documentElement);

Результат:

<div class="video-image">
  <a href="http://site.com/video/TI - No+Matter+What/_CHheEQe9M8/" title="23">
    <img src="http://i.ytimg.com/vi/_CHheEQe9M8/3.jpg" alt="TI" width="130" height="78"/>
  </a>
  <span class="video-title">
    <a href="http://site.com/video/TI - No+Matter+What/_CHheEQe9M8/" title="sdg">No Matter What</a>
  </span>
  <span class="video-artist">
    <a href="http://site.com/video/TI - No+Matter+What/_CHheEQe9M8/" title="ss" class="ellipsis">TI</a>
  </span>
</div>
0 голосов
/ 26 ноября 2010

Измените ^> на ^ ", чтобы начать с того, что он выбирает так же, как и при тестировании.

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