PHP:从YouTube网址提取视频ID
问题描述:
难道我做错了什么? 我需要youtube代码,但它不会返回实际值。PHP:从YouTube网址提取视频ID
if(preg_match_all("http:\/\/www\.youtube\.com\/v\/(.*)(.*)", $row->n_texto, $matches){
$code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg";
}
编辑 - 基于评论ircmaxell,在文本中的链接结构是:
的http:// www.youtube.com/v/plMvAh10HVg%26hl=en%26fs = 1%26rel = 0
更新
的问题是:我的代码返回一个像这样的链接:
http://www.youtube.com/v/plMvAh10HVg%26hl=en%26fs=1%26rel=0
我可以用正则表达式阻止它出现之前%26hl=en%26fs=1%26rel=0
?
答
你的正则表达式是不正确的。它有不止几个错误。现在,只要你想要的东西,试试这个:
#http://(?:.*)youtube.com/v/([^/\#?]+)#
现在,至于为什么,让我们来看看正则表达式:
http://(?:.*)youtube.com
您正在寻找与http://
开头的字符串,之后有什么(www.
,ww2.
,或什么也没有)。
/v/
您在寻找/v/
作为URL的开头。
([^/\\#?]+)
您正在寻找一切到另一个/
,查询字符串(?
)或一个锚(#
)。所以这应该匹配你正在寻找的ID。
所以,这将是
if(preg_match("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){
$code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1]."/0.jpg";
}
如果你想找到所有:
根据if(preg_match_all("#http://(?:.*)youtube.com/v/([^/\#?]+)#", $row->n_texto, $matches){
foreach ($matches[1] as $match) {
$code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$match."/0.jpg";
}
}
+0
Strenge,它返回一条消息: – Klauzito 2011-02-01 16:44:21
答
^http://\w{0,3}.?youtube+\.\w{2,3}/watch\?v=[\w-]{11}
答
提供的链接有1前W空间在www.youtube.com,你需要的代码是:
if(preg_match_all("%http://www\.youtube\.com/v/([\w]+)%i", $row->n_texto , $matches)){
$code = $image_to_thumb .= "http://i1.ytimg.com/vi/".$matches[1][0]."/0.jpg";
}
也,你有被编码的网址,你可能想使用它之前使用urldecode($按行> n_texto)。
链接,您提供的是不是一个有效的链接。即使你urldecode它,它仍然会是`plMvAh10HVg&HL = EN&FS = 1的rel = 0`这不是一个有效的URL(它应该有一个`?`之前的第一个`和`位)... – ircmaxell 2011-02-01 17:08:39
灿” t youtube links be watch?v = blah以及?如果您只查看/ v/blah链接,只需使用parse_url获取路径并在开始处删除/ v即可。 – 2011-02-01 17:14:16