web-dev-qa-db-fra.com

Obtenir la dernière partie de l'URL PHP

Je me demande simplement comment extraire la dernière partie d'une URL à l'aide de PHP.

L'URL exemple est:

http://domain.com/artist/song/music-videos/song-title/9393903

Maintenant, comment puis-je extraire la dernière partie en utilisant PHP?

9393903

Il y a toujours le même nombre de variables dans l'URL et l'id est toujours à la fin.

47
Belgin Fish

Vous pouvez utiliser preg_match pour faire correspondre la partie de l'URL souhaitée. 

Dans ce cas, puisque le modèle est simple, nous recherchons une barre oblique (\/ et nous devons l’échapper, car la barre oblique indique le début et la fin du modèle d’expression régulière), ainsi qu’un ou plusieurs chiffres (\d+ ) à la toute fin de la chaîne ($). Les parenthèses autour du \d+ servent à capturer la pièce que nous voulons: à savoir la fin. Nous affectons ensuite la fin souhaitée ($end) à $matches[1] (et non $matches[0], car il s'agit de la même chose que $url (c.-à-d. 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.
}

Remarque: Vous pouvez ou non ajouter une sophistication supplémentaire à cette expression régulière. Par exemple, si vous savez que vos chaînes d'URL toujours commencent par http://, l'expression rationnelle peut devenir /^http:\/\/.*\/(\d+)$/ (où .* signifie zéro ou plus de caractères (qui ne sont pas le caractère de nouvelle ligne)).

24
user554546

Séparez-le et obtenez le dernier élément:

$end = end(explode('/', $url));
# or:
$end = array_slice(explode('/', $url), -1)[0];

Edit: Pour prendre en charge les URL canoniques de style Apache, rtrim est pratique:

$end = end(explode('/', rtrim($url, '/')));
# or:
$end = array_slice(explode('/', rtrim($url, '/')), -1)[0];

Un autre exemple que je pourrais considérer comme plus lisible est ( Demo ):

$path = parse_url($url, PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);

Cet exemple prend également en compte pour ne travailler que sur le chemin de l'URL.


Encore un autre edit (ans après), canonisation et utilisation simple alternative UTF-8 incluse (via une expression régulière PCRE en PHP):

<?php

use function call_user_func as f;
use UnexpectedValueException as e;

$url = 'http://example.com/artist/song/music-videos/song-title/9393903';

$result = preg_match('(([^/]*)/*$)', $url, $m)

    ? $m[1]
    : f(function() use ($url) {throw new e("pattern on '$url'");})
    ;

var_dump($result); # string(7) "9393903"

Ce qui est assez difficile mais montre comment envelopper ceci dans un appel preg_match pour un contrôle plus fin via un modèle d’expression régulière PCRE. Pour donner un sens à cet exemple «nu-metal», il devrait être intégré à une fonction qui lui est propre (ce qui rendrait également le crénelage superflu). Vient de présenter cette façon pour la brièveté.

87
hakre

Le moyen le plus simple pour y parvenir est avec basename()

echo basename('http://domain.com/artist/song/music-videos/song-title/9393903');

Qui va imprimer

9393903

Bien entendu, s'il existe une chaîne de requête à la fin, elle sera incluse dans la valeur renvoyée. Dans ce cas, la réponse acceptée constitue une meilleure solution.

81
nikc.org

Si vous recherchez une version robuste pouvant traiter n’importe quelle forme de URLs , cela devrait suffire:

<?php

$url = "http://foobar.com/foo/bar/1?baz=qux#fragment/foo";
$lastSegment = basename(parse_url($url, PHP_URL_PATH));
14
Peter
$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!

12
Tamer Shlash

Une autre option:

$urlarray=explode("/",$url);
$end=$urlarray[count($urlarray)-1];
4
someone

Une des solutions les plus élégantes était ici Obtenir les caractères après le dernier/dans l'URL

par DisgruntledGoat

$id = substr($url, strrpos($url, '/') + 1);

strrpos obtient la position de la dernière occurrence de la barre oblique; substr renvoie tout après cette position.

3
Robert Sinclair

Une doublure: $page_path = end(explode('/', trim($_SERVER['REQUEST_URI'], '/')));

Obtenir l'URI, couper les barres obliques, convertir en tableau, récupérer la dernière partie

2
Justin

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 "/" à droite.

1
XxANxX

Réponse en ligne:

$url = "http://www.yoursite/one/two/three/drink";
echo $end = end((explode('/', $url)));

Sortie: boire

0
George Chalhoub

1-liner

$end = preg_replace( '%^(.+)/%', '', $url );

// if( ! $end ) no match.

Cela supprime simplement tout ce qui précède la dernière barre oblique, y compris celle-ci.

0
Jorge Orpinel
$mylink = $_SERVER['PHP_SELF'];
$link_array = explode('/',$mylink);
echo $lastpart = end($link_array);
0
Shuhad zaman