【问题标题】:What would be the most rational way to parse youtube video link for video ID in PHP? [duplicate]在 PHP 中解析 youtube 视频链接以获取视频 ID 的最合理方法是什么? [复制]
【发布时间】:2011-10-10 18:36:21
【问题描述】:

可能的重复:
Youtube API - Extract video ID
How do I extract query parameters from an URL string in PHP?

如果输入如下:

$input = 'http://www.youtube.com/watch?v=ALph_u2iee8&feature=topvideos_music';

我想最终得到:

$result = 'ALph_u2iee8';

在 PHP 中最合理的方法是什么?

【问题讨论】:

  • 我投票不重复:这个问题总是有相同的格式,另一个有多种格式并从字符串中解析链接。这是一个更简洁的问题。
  • 它是重复的。你(@Levi)真的应该在里面发布你的答案。当 PHP 具有易于理解的任务函数时,使用一个巨大的正则表达式是很疯狂的。
  • 我重申我的立场:这不是重复的。该问题涉及任何格式的 youtube url,而这个问题涉及一种格式。仅仅因为它是一个子集问题,并不意味着它应该得到一个子集或重复的答案。对于指定的这种格式,有一个非常量身定制的答案。机制甚至不尽相同。

标签: php


【解决方案1】:

PHP 已经有了处理这个问题的函数。

$input = 'http://www.youtube.com/watch?v=ALph_u2iee8&feature=topvideos_music';

$queryString = parse_url($input, PHP_URL_QUERY);

$queries = array();

parse_str($queryString, $queries);

echo $queries['v'];

【讨论】:

  • 在本地范围内设置变量并不是很好的做法。我会在调用parse_str() 时使用第二个参数。当然,您可以调整parse_url() 并检查域名是否匹配。
  • @Matthew 我同意你的意见,我改变了它。
【解决方案2】:

我在尝试从 URL 获取 youtube 视频 ID 时使用此功能

function get_youtube_id_from_url( $url ) {
    preg_match('/[\\?&]v=([^&#]*)/si', $url, $matches );

    return !empty( $matches ) ? $matches[1] : false;
}

【讨论】:

    【解决方案3】:

    有些人会说使用正则表达式,但对于这么简单的事情,使用子字符串会更快更好。

    这应该可以完成工作:

    $input = 'http://www.youtube.com/watch?v=ALph_u2iee8&feature=topvideos_music';
    $start = strpos($input, '?v=');
    $length = strpos($input, '&', $start + 1) - $start;
    echo substr($input, $start + 3, $length);
    

    当然,parse_url/parse_str 是正确的方式。

    【讨论】:

    • 我的答案确实比@Levi Morrison 的运行时间长 5 倍
    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 2012-04-15
    • 1970-01-01
    • 2011-03-24
    • 2020-11-05
    • 2016-01-11
    相关资源
    最近更新 更多