Utilisez parse_url() et parse_str().
(Vous pouvez utiliser des regex pour presque tout, mais ils sont très faciles à mettre en erreur. Donc, s'il existe des fonctions PHP spécifiquement pour ce que vous essayez de réaliser, utilisez-les.)
parse_url prend une chaîne et la découpe en un tableau contenant plusieurs informations. Vous pouvez travailler avec ce tableau, ou vous pouvez spécifier l'élément que vous voulez en tant que second argument. Dans ce cas, nous sommes intéressés par la requête, qui est PHP_URL_QUERY
.
Maintenant nous avons la requête, qui est v=C4kxS1ksqtw&feature=relate
, mais nous voulons seulement la partie après v=
. Pour cela, nous utilisons parse_str
qui fonctionne essentiellement comme GET
sur une chaîne. Il prend une chaîne et crée les variables spécifiées dans la chaîne. Dans ce cas, $v
et $feature
sont créés. Nous sommes seulement intéressés par $v
.
Pour être sûr, vous ne voulez pas juste stocker toutes les variables de parse_url
dans votre espace de noms (voir le commentaire de mellowsoon). Au lieu de cela, stockez les variables en tant qu'éléments d'un tableau, de sorte que vous ayez le contrôle sur les variables que vous stockez, et vous ne pouvez pas écraser accidentellement une variable existante.
En mettant tout ensemble, nous avons :
Exemple de travail
Édition :
hehe - merci Charles. Cela m'a fait rire, je n'avais jamais vu la citation de Zawinski auparavant :
Certaines personnes, lorsqu'elles sont confrontées à un problème, pensent 'Je sais, j'utiliserai des expressions régulières'. Maintenant, elles ont deux problèmes.
– Jamie Zawinski
1 votes
Cela pourrait être utile stackoverflow.com/questions/9522868/…
1 votes
Tu devrais regarder mon code github.com/lingtalfi/video-ids-and-thumbnails/blob/master/…, j'ai fourni des fonctions qui extraient l'id de youtube, vimeo et dailymotion.
0 votes
@ling dans la fonction getVideoThumbnailByUrl(), vous utilisiez la fonction file_get_contents() désuète pour Vimeo. Ce remplacement fonctionnera partout:
$ch=curl_init(); curl_setopt($ch, CURLOPT_URL, "http://vimeo.com/api/v2/video/$id.php"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); $hash =unserialize(curl_exec($ch)); curl_close($ch);
0 votes
@ling Aussi dans getYoutubeId($url), la condition finale acceptera n'importe quelle chaîne de caractères et la validera comme un identifiant YT. J'ai passé 'junk' et il a retourné junk en tant qu'identifiant analysé à partir de cette chaîne.
0 votes
@jerrygarciuh: à ma connaissance file_get_contents n'est pas obsolète, n'hésitez pas à signaler un problème sur github si vous avez eu des soucis avec cette fonction. Merci d'avoir repéré l'erreur dans getYoutubeId (je l'ai améliorée).
0 votes
@ling - tu as raison. La formulation correcte serait que file_get_contents est très couramment désactivé par les hôtes en raison d'un risque de sécurité.