另一个简单的选择是使用parse_url
和parse_str
函数。
function getYoutubeEmbedUrl ($url) {
$parsedUrl = parse_url($url);
# extract query string
parse_str(@$parsedUrl['query'], $queryString);
$youtubeId = @$queryString['v'] ?? substr(@$parsedUrl['path'], 1);
return "https://youtube.com/embed/{$youtubeId}";
}
假设我们有这两个链接:
$link1 = 'https://www.youtube.com/watch?v=NVcpJZJ60Ao';
$link2 = 'https://www.youtu.be/NVcpJZJ60Ao';
getYoutubeEmbedUrl($link1); // https://youtube.com/embed/NVcpJZJ60Ao
getYoutubeEmbedUrl($link2); // https://youtube.com/embed/NVcpJZJ60Ao
解释
parse_url
函数会将链接提取为 4 个组件:scheme
、host
、path
和query
(参见文档)。
parse_url($link1);
// output
[
"scheme" => "https",
"host" => "www.youtube.com",
"path" => "/watch",
"query" => "v=NVcpJZJ60Ao",
]
的输出$link2
将是:
parse_url($link2);
// output
[
"scheme" => "https",
"host" => "www.youtu.be",
"path" => "/NVcpJZJ60Ao",
]
并将parse_str
查询字符串转换为数组(参见文档)。
parse_str('v=NVcpJZJ60Ao', $output);
// value of variable $output
[
"v" => "NVcpJZJ60Ao",
]