2013-02-20 61 views
0

我有一个存储为iframe url的youtube视频数据库。我想要做的是使用一些基本的替换命令在每个视频旁边显示YouTube视频缩略图。我想在php中运行一个函数,它会自动找到内容,去掉iframe标签并留下一个只有id的函数。过滤掉字符串中的元素PHP

在第三场

我的代码这样:

echo $galleryitems[$i][2] 

将返回

<iframe width="640" height="360" src="http://www.youtube.com/embed/scYj-bDEaKI?rel=0" frameborder="0" allowfullscreen></iframe> 

我不是很确定的任何其他办法可以做到这一点,因为所有的代码都是一样的,我想从代码剔除这些零件:

<iframe width="640" height="360" src="http://www.youtube.com/embed/ 

?rel=0" frameborder="0" allowfullscreen></iframe>` 

我在想str_replace就足够了吗?我想到底是一个函数$strLink = scYj-bDEaKI(只是视频ID)

看遍了所以有点和尝试这样做:

$galleryitems[$i][2] = preg_replace('/<iframe[^>]*>(.*?)<\/iframe>/', '', $strLink, 1); 

echo $strLink; 

,但什么都不会返回。目光转向广场,感谢任何帮助!

+0

哦...为什么人们讨厌那些漂亮的 “出无门的” PHP变量多数民众赞成。您正在使用preg_replace错误。 '$ strLink = preg_replace('/ ] *>(。*?)<\/iframe> /','',$ galleryitems [$ i] [2],1); '应该对你更好用 – Najzero 2013-02-20 14:35:30

回答

0

请不要用正则表达式解析HTML。

$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$items = $dom->getElementsByTagName('iframe'); 
if ($items->length) { 
    $url = basename(parse_url($items->item(0)->getAttribute('src'), PHP_URL_PATH)); 
} 

in codepad

+0

感谢Ranty,这是相当不错的独立 - 但是当我将它嵌入到文档中时,它将所有单独的ID分析​​到一行中......每一个都应该单独导出。这是否与DOM元素有关? – antonanton 2013-02-20 16:02:55

+0

@Anthony我不确定你的意思。所有视频ID都分配给同一个变量'$ url'是否存在问题?你可以使用一个数组,我更新了它的答案。如果这不是你的意思,请澄清。 – Ranty 2013-02-20 17:38:31

+0

说话太快,是一个未封闭的标签的问题,哎呀!谢谢! – antonanton 2013-02-20 18:19:19

1

对于PHP RegEx语法,你可以参考

http://php.net/manual/en/reference.pcre.pattern.syntax.php

$s = '<iframe width="640" height="360" src="http://www.youtube.com/embed/scYj-bDEaKI?rel=0" frameborder="0" allowfullscreen></iframe>'; 
echo preg_replace('/<iframe.* src="http:\/\/www\.youtube\.com\/embed\/(.*?)\?.*<\/iframe>/', '$1', $s);