这个问题已经在 Stack Overflow 上被问过很多次了,我也看了很多次,但我找到的所有答案都只能找到 Facebook URL 的一种变体,但我需要确保你可以使用可以使用的任何变体。
- https://www.facebook.com/username2/videos/100000000000000
- http://www.facebook.com/photo.php?v=107084586333124
- http://www.facebook.com/photo.php?more=difficult&v=107084586333124
- http://www.facebook.com/?v=107084586333124
这是我目前得到的结果,但它并不像我预期的那样有效, https://regex101.com/r/sC6oR2/6
^https?://www.facebook.com/(\?v=\d+)|(.*?/videos/(\d+))$
我不太熟悉 RegEx,但在四处搜索时,我试图充分利用它。我也研究过使用 parse_url() 并且我听说它会比 RegEx 更好,但是因为 Facebook 有许多不同类型的 URL:s。
我非常感谢对此提供一些帮助,因为我一天中的大部分时间都在努力让它工作,当我让一个部分工作时,我却没有得到另一个 - 它让我轻微的头痛
最佳答案
<?php
/**
* Get video id from any facebook video URL
* funcion by Mohamed Elbahja
*/
function fbvideoid($url) {
// delete space in url
$url = str_replace(' ', '', $url);
// parse url
$pars = parse_url($url);
$path = $pars['path'];
// delete end slashe
if($path[strlen($path) - 1] == '/'):
$path = rtrim($path, '/');
endif;
$count = count(explode("/", $path));
// type url
$urltype = "";
if ($pars['path'] == "/photo.php" || $pars['path'] == "/video.php" || $pars['path'] == "/"):
$urltype = 2;
elseif($count == 4):
$urltype = 3;
elseif($count == 5):
$urltype = 1;
endif;
// get id
if ($urltype == 1) {
$ex = explode("/", $path);
$videoid = $ex[4];
} else if ($urltype == 2) {
parse_str($pars['query'], $e);
$videoid = $e['v'];
} else if ($urltype == 3) {
$ex = explode("/", $path);
$videoid = $ex[3];
} else {
$videoid = null;
}
return $videoid;
}
// example :)
echo fbvideoid('https://www.facebook.com/username2/videos/107084586333124');
echo "<br>";
echo fbvideoid('http://www.facebook.com/photo.php?v=107084586333124');
echo "<br>";
echo fbvideoid('http://www.facebook.com/photo.php?more=diffictult&v=107084586333124');
echo "<br>";
echo fbvideoid('http://www.facebook.com/?v=107084586333124');
echo "<br>";
echo fbvideoid('http://www.facebook.com/video.php?v=107084586333124');
echo "<br>";
echo fbvideoid('https://www.facebook.com/LovehelloU/videos/vb.172573132808153/107084586333124/?type=2&theater');
关于php - 在 PHP 中使用 RegEx 从 URL 获取 Facebook 视频 ID 的多种变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31323555/