正则表达式/ DOM解析在保留字符串的同时用缩略图替换YouTube iframe

时间:2013-12-13 16:16:25

标签: php regex dom

我不知道是否最好使用DOM解析器或正则表达式,但我想用缩略图替换我的博客中的所有YouTube iframe。我找到了确实返回所有拇指的方法,但是仍然在字符串中。我希望保持字符串不变,但用缩略图替换Iframe。

此代码会返回所有YouTube视频:

$data = get_the_content();

// Find all unique YouTube videos
$re_youtube = '%youtube\.com/(?:v/|watch\?v=|embed/)(\w{10,12})\b%';
$count = preg_match_all($re_youtube, $data, $matches);


for ($i = 0; $i < $count; ++$i) {
$videos[$matches[1][$i]] = 'yt';
}

foreach ( $videos as $video => $v) {
    if ( $v == 'yt' ) { 
    echo '<div id="yt_'.$video.'" class="viddid viddid_thumb" onclick="myFunction(\''.$video.'\')"><img src="http://img.youtube.com/vi/'.$video.'/0.jpg"></div>';
    }
}

我确定我可以使用preg_replace来实现我正在寻找的东西吗?我很高兴能得到任何帮助!

我一直在做一些圆顶解析来清理HTML中的段落。它看起来像这样:

// Set the right encoding of string
$content = mb_convert_encoding($content, 'html-entities', 'utf-8'); 

$DOM = new DOMDocument('1.0', 'UTF-8');
$DOM->substituteEntities = TRUE;    
$DOM->loadHTML($content);
foreach($DOM->getElementsByTagName("iframe") as $iframe)
{
    foreach($p->attributes as $attr)

        $p->parentNode->removeChild($p);        
}

$content = $DOM->saveHTML();

所以现在我需要一些帮助来结合他们两个 - 是。

(以下是此操作的页面示例: http://2famous.tv/2013/11/17/middle-eastern-artists-donate-more-than-1-1-million-of-art-to-help-syrian-refugee-children/

1 个答案:

答案 0 :(得分:2)

我会使用DOMXPath

$doc = new DOMDocument();
$doc->loadHTML($your_html_string);
$selector = new DOMXPath($doc);

// use the starts-with function to select iframes of interest
foreach($selector->query('//iframe[starts-with(@src, "//www.youtube.com")]')
    as $iframe
) {
    $iframe->parentNode->removeChild($iframe);
}
echo $doc->saveHTML();