使用PHP从html代码获取Youtube视频ID

asu*_*ran 6 php regex

我想从html代码中获取所有唯一的YouTube视频ID

查看youtube视频的(或多个)对象/嵌入代码

//来自数据库的html

    <p>loremm ipsum dolor sit amet enot
    <a href="link" attribute=""blah blah blah">anchor link</a>
    </p>

    <object width="425" height="344">
        <param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"
    type="application/x-shockwave-flash"
    allowscriptaccess="always"
    allowfullscreen="true"
    width="425"
    height="344">
    </embed>
        </object>

    <image src="path/to/image.ext" >
    <p>lorem ipsum dolor sit amet... blah</p>
    <p>lorem ipsum dolor sit amet... blah</p>

    <object width="425" height="344">
        <param name="movie" value="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"></param>
        <param name="allowFullScreen" value="true"></param>
        <param name="allowscriptaccess" value="always"></param>
        <embed src="http://www.youtube.com/v/Ou5eVl5eqtg&hl=es_ES&fs=1&"
    type="application/x-shockwave-flash"
    allowscriptaccess="always"
    allowfullscreen="true"
    width="425"
    height="344">
    </embed>
        </object>
<p>blah</p>
blah<br/>
blah<br/>
blah<br/>
Run Code Online (Sandbox Code Playgroud)

Jim*_*hel 19

YouTube视频网址通常有两种格式:

http://www.youtube.com/v/[videoid]
http://www.youtube.com/watch?v=[videoid]
Run Code Online (Sandbox Code Playgroud)

"www.youtube.com"可以替换为"www.youtube.co.uk"或其他国家/地区代码,但据我所知,无论域名如何,视频ID都是相同的.

视频ID是一个11字符的字符串,使用base-64编码.

假设您的代码将解析HTML文档中的网址,您可以确定它是否是YouTube视频网址并使用此正则表达式获取视频ID(使用C#编写,但应该很容易转换为php或其他任何内容):

"^http://(?<domain>([^./]+\\.)*youtube\\.com)(/v/|/watch\\?v=)(?<videoId>[A-Za-z0-9_-]{11})"
Run Code Online (Sandbox Code Playgroud)

这个特殊的正则表达式特定于youtube.com.让它了解所有不同的国家/地区代码(youtube.co.uk,youtube.pl,youtube.it等).

  • 我想你可以弄清楚如何翻译它. (7认同)
  • 你忘记了这种格式:http://youtu.be/ [videoid]例子:http://youtu.be/R_FOfQSarWY (2认同)

Sph*_*ere 12

实际上,为了完全捕捉所有选项,我发现WebFlakeStudio的解决方案是最好的,除了以下之外,还可以捕获所有3种形式的*咳嗽*客户端愚蠢*咳嗽*

(PHP)

preg_match('#(\.be/|/embed/|/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#', $YoutubeCode, $matches);
if(isset($matches[2]) && $matches[2] != ''){
     $YoutubeCode = $matches[2];
}
Run Code Online (Sandbox Code Playgroud)

我添加了/ embed,这应该捕获所有.对象,URL和嵌入选项.


Fra*_*mer 7

从htmlpurifier的youtube插件中肆无忌惮地被盗:

preg_match('#<object[^>]+>.+?http://www.youtube.com/v/([A-Za-z0-9\-_]+).+?</object>#s', $markup, $matches);
var_dump($matches[1]);
Run Code Online (Sandbox Code Playgroud)