2009-09-01 8 views
0

Je souhaite que cet URL http://www.youtube.com/watch?v=dgNgODPIO0w&feature=rec-HM-fresh+div soit transformé en: http://www.youtube.com/v/dgNgODPIO0w avec php.Modifier l'url-string

Répondre

3

J'utiliser une combinaison de parse_url et parse_str:

$url = 'http://www.youtube.com/watch?v=dgNgODPIO0w&feature=rec-HM-fresh+div'; 
$parts = parse_url($url); 
parse_str($parts['query'], $params); 
$url = 'http://www.youtube.com/v/'.$params['v']; 

Ou une simple expression régulière:

preg_match('/^'.preg_quote('http://www.youtube.com/watch?', '/').'(?:[^&]*&)*?v=([^&]+)/', $url, $match); 
$url = 'http://www.youtube.com/v/'.$match[1]; 
+0

Vous savez que vous pouvez utiliser un caractère différent au lieu de/en tant que délimiteur dans une regex, non? Quel que soit le premier caractère de votre chaîne, il sera traité comme un délimiteur, de sorte que vous pouvez utiliser quelque chose comme # ou @ ou ~ au lieu de/(pour éviter d'avoir à échapper des barres obliques inverses dans l'URL elle-même). – Amber

+0

@Dav: Oui, je le sais. Mais savez-vous que '.' est un méta-caractère et représente n'importe quel caractère arbitraire? – Gumbo

1
$url = 'http://www.youtube.com/watch?v=dgNgODPIO0w&feature=rec-HM-fresh+div'; 
$url = preg_replace('@http://www.youtube.com/watch\?v=([^&;]+).*[email protected]', 'http://www.youtube.com/v/$1', $url); 
0
$url = 'http://www.youtube.com/watch?v=dgNgODPIO0w&feature=rec-HM-fresh+div'; 

preg_match('~(http://www\.youtube\.com/watch\?v=.+?)&.*?~i', $url, $matches); 

echo $matches[1];