Obtenir la dernière partie de L'URL PHP
je me demande juste comment je peux extraire la dernière partie d'une URL en utilisant PHP.
L'URL d'exemple est:
http://domain.com/artist/song/music-videos/song-title/9393903
maintenant, comment puis-je extraire la partie finale en utilisant PHP?
9393903
Il y a toujours le même nombre de variables dans l'URL, et l'id est toujours à la fin.
12 réponses
vous pouvez utiliser preg_match
pour faire correspondre la partie de L'URL que vous voulez.
dans ce cas, puisque le motif est facile, nous recherchons une barre oblique vers l'avant ( \/
et nous devons l'échapper puisque la barre oblique vers l'avant indique le début et la fin du motif d'expression régulière), avec un ou plusieurs chiffres ( \d+
) à la toute fin de la chaîne ( $
). Les parenthèses autour du \d+
sont utilisées pour capturer la pièce que nous voulons: à savoir la fin. Nous assignons ensuite la fin que nous voulons ( $end
) à $matches[1]
(pas $matches[0]
, puisque c'est la même chose que $url
(c'est-à-dire la chaîne entière)).
$url='http://domain.com/artist/song/music-videos/song-title/9393903';
if(preg_match("/\/(\d+)$/",$url,$matches))
{
$end=$matches[1];
}
else
{
//Your URL didn't match. This may or may not be a bad thing.
}
Note: Vous pouvez ou ne voulez pas d'ajouter un peu plus de sophistication à cette expression régulière. Par exemple, si vous savez que vos chaînes D'URL vont toujours commencer par http://
alors le regex peut devenir /^http:\/\/.*\/(\d+)$/
(où .*
signifie zéro ou plusieurs caractères (qui ne sont pas le caractère newline)).
séparez-le et obtenez le dernier élément:
$end = end(explode('/', $url));
# or:
$end = array_slice(explode('/', $url), -1)[0];
Edit: À l'appui de apache-style-les URLs canoniques, rtrim
est à portée de main:
$end = end(explode('/', rtrim($url, '/')));
# or:
$end = array_slice(explode('/', rtrim($url, '/')), -1)[0];
un autre exemple qui pourrait me sembler plus lisible est ( Demo ):
$path = parse_url($url, PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);
Cet exemple prend également en compte seulement le travail sur le chemin de la URL.
la façon la plus simple d'accomplir ceci, est avec basename()
echo basename('http://domain.com/artist/song/music-videos/song-title/9393903');
qui imprimera
9393903
bien sûr, s'il y a une chaîne de requête à la fin, elle sera incluse dans la valeur retournée, auquel cas la réponse acceptée est une meilleure solution.
$id = strrchr($url,"/");
$id = substr($id,1,strlen($id));
Voici la description de la fonction strrchr
: http://www.php.net/manual/en/function.strrchr.php
j'Espère que c'est utile!
une autre option:
$urlarray=explode("/",$url);
$end=$urlarray[count($urlarray)-1];
l'une des solutions les plus élégantes était ici obtenir des caractères après le dernier / dans l'url
by DisgruntledGoat
$id = substr($url, strrpos($url, '/') + 1);
strrpos obtient la position de la dernière occurrence de la barre oblique; substr retourne tout après cette position.
une doublure: $page_path = end(explode('/', trim($_SERVER['REQUEST_URI'], '/')));
Obtenir URI, couper des barres obliques, de les convertir en tableau, prenez la dernière partie de la
cela fera le travail facilement pour obtenir la dernière partie de L'URL requise
$url="http://domain.com/artist/song/music-videos/song-title/9393903";
$requred_string= substr(strrchr($url, "/"), 1);
vous obtiendrez la chaîne après le premier " / " à partir de la droite.
1-liner
$end = preg_replace( '%^(.+)/%', '', $url );
// if( ! $end ) no match.
cela enlève tout simplement tout avant la dernière coupure, y compris elle.
Une ligne de travail réponse:
$url = "http://www.yoursite/one/two/three/drink";
echo $end = end((explode('/', $url)));
sortie: boisson
$mylink = $_SERVER['PHP_SELF'];
$link_array = explode('/',$mylink);
echo $lastpart = end($link_array);