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.
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)).
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é.
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.
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));
$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];
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.
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
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.
Réponse en ligne:
$url = "http://www.yoursite/one/two/three/drink";
echo $end = end((explode('/', $url)));
Sortie: boire
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.
$mylink = $_SERVER['PHP_SELF'];
$link_array = explode('/',$mylink);
echo $lastpart = end($link_array);