【问题标题】:fetching youtube playlist id with php regex使用 php 正则表达式获取 youtube 播放列表 ID
【发布时间】:2011-02-25 08:46:24
【问题描述】:

我正在尝试从 url 获取播放列表 id 并将其保存到新变量中。 例如,如果用户将其输入到表单中,然后提交

http://www.youtube.com/watch?v=A7izsd5IXq8&playnext=1&list=PL6753173C0F0BE9ED

我只想获取PL6753173C0F0BE9ED 并将其保存到一个新变量中。我尝试使用爆炸来执行此操作,因此它保存了 &list= 之后的所有内容,但我运气不佳。

有什么想法吗?

感谢您的帮助!

【问题讨论】:

    标签: php regex youtube playlist


    【解决方案1】:

    您可以使用parse_strparse_url

    $string = 'http://www.youtube.com/watch?v=A7izsd5IXq8&playnext=1&list=PL6753173C0F0BE9ED';
    $url = parse_url($string);
    parse_str($url['query'],$q);
    $list = $q['list'];
    

    【讨论】:

    • +1 考虑将PHP_URL_QUERY 作为第二个参数添加到parse_url()
    • 这比使用正则表达式好多。正确解析很重要!绝对是要走的路。
    【解决方案2】:
    $url = 'http://www.youtube.com/watch?v=A7izsd5IXq8&playnext=1&list=PL6753173C0F0BE9ED';
    $pl = preg_match('/list=(PL[a-f0-9]+)/i', $url, $match)
      ? $match[1]
      : false;
    

    【讨论】:

    • 考虑将list= 替换为[?&]list=,以免与未来潜在的oldList 参数(或任何其他?list 排列)匹配。
    【解决方案3】:

    试试

    $url = 'http://www.youtube.com/watch?v=A7izsd5IXq8&playnext=1&list=PL6753173C0F0BE9ED';
    
    echo end(explode('=', $url));
    

    【讨论】:

    • 潜在风险:参数顺序主要不重要,http://www.youtube.com/watch?v=A7izsd5IXq8&list=PL6753173C0F0BE9ED&playnext=1 将(可能)导致相同的资源但产生另一个“播放列表 ID”(1)。因此,您取决于参数顺序。 (但是,不能保证将 list 作为参数名称会更好。)
    【解决方案4】:
    $url = 'http://www.youtube.com/watch?v=A7izsd5IXq8&playnext=1&list=PL6753173C0F0BE9ED';
    echo "URL = $url<br />";
    $playlistID = explode("&list=", $url);
    echo "playlistID = $playlistID[1]";
    

    这似乎有效

    【讨论】:

    • 与@experimentX 答案的评论中指出的相同问题:考虑 URL http://www.youtube.com/watch?list=PL6753173C0F0BE9ED&amp;v=A7izsd5IXq8&amp;playnext=1。 (并不是说这个解决方案绑定会出错。)
    猜你喜欢
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2013-01-19
    • 2014-12-14
    相关资源
    最近更新 更多