2009-09-01 73 views
0

我想将此网址http://www.youtube.com/watch?v=dgNgODPIO0w&feature=rec-HM-fresh+div转换为:http://www.youtube.com/v/dgNgODPIO0w使用php。更改网址字符串

回答

3

我会使用的parse_urlparse_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']; 

或一个简单的正则表达式:

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

你知道你可以使用不同的字符,而不是/作为你的分隔符在正则表达式中,对吧?无论你的字符串的第一个字符是什么,都将被视为分隔符,所以你可以使用类似#或@或〜而不是/(以防止在url本身中反斜杠)。 – Amber 2009-09-01 11:52:14

+0

@Dav:是的,我知道。但是你知道'.'是一个元字符,代表任意字符吗? – Gumbo 2009-09-01 11:57:13

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];