2010-12-15 81 views
0

Hey là! J'ai une question simple avec laquelle je me bats, j'espère que vous pourrez y jeter un coup d'œil. J'ai un champ d'entrée où les utilisateurs seraient mis en liens YouTube et votre seule page typique fonctionne très bien, par exemple:Remplacer une partie d'un URL avec php

youtube.com/watch?v=c3sBBRxDAqk 

ce watch?v=11characters fonctionne très bien

mais si les utilisateurs Entrées autre chose que l'exemple ci-dessus tels que:

youtube.com/watch?v=tC0E1id4raw&feature=topvideos 
//or 
youtube.com/watch?v=smETLCCPTVo&feature=aso 

est-il possible de prendre les deux ci-dessus uRLs et supprimer tous les caractères après le w atch?v=11characters?

donc, en substance, tourner cette

$url = "youtube.com/watch?v=tC0E1id4raw&feature=topvideos" 

dans

youtube.com/watch?v=tC0E1id4raw removing & and onwards 

je devais supprimer le bit http en raison de la prévention du spam

est-il un moyen simple de le faire?

+0

http://php.net/manual/en/function.parse-url.php et http://www.php.net/manual/en/function. parse-str.php existe pour cela –

Répondre

0

Une façon de faire est d'utiliser explode:

$url = "youtube.com/watch?v=tC0E1id4raw&feature=topvideos"; 

$newurl = explode("&", $url); 

Tout avant le "&" sera en newURL de $ [0], et tout ce qui suit sera newURL de $ [1] .

+0

cela fonctionne le mieux dans ma situation donnée, je suppose que j'ai oublié exploser lol, merci pour l'aide! – user543468

4
$url = "youtube.com/watch?v=tC0E1id4raw&feature=topvideos"; 

list($keep, $chuck) = explode('&', $url); 

echo $keep; 
+0

J'écrivais une réponse qui utilisait des strpos, mais j'aime mieux ta réponse. Upvote! – sjobe

+0

ou vous pouvez utiliser $ keep = current (explode ('&', $ url)); – fire

+0

merci beaucoup pour les informations détaillées! – user543468

0

Pas besoin de regex:

$parts = parse_url($url); 
$params = array(); 
parse_str($parts['query'], $params); 

Si vous avez PECL pecl_http installé:

$url = http_build_url($url, 
         array('query' => 'v='. $params['v']), 
         HTTP_URL_REPLACE | HTTP_URL_STRIP_FRAGMENT); 

ou sans pecl_http:

$url = $parts['scheme'] . $parts['host'] . $parts['path'] . '?v=' . $params['v']; 

Ceci est plus robuste contre les changements de l'ordre des paramètres de requête.

Référence: parse_url, parse_str, http_build_url

+0

J'ai testé cela et ça marche mais je suis un total de noob en php et j'ai eu du mal à suivre le code un peu, j'ai besoin d'en apprendre plus! merci = D – user543468