it-swarm.it

Ottieni l'ultima parte dell'URL PHP

Mi sto solo chiedendo come posso estrarre l'ultima parte di un URL usando PHP.

L'URL di esempio è:

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

Ora come posso estrarre la parte finale usando PHP?

9393903

C'è sempre lo stesso numero di variabili nell'URL e l'ID è sempre alla fine.

47
Belgin Fish

Puoi usare preg_match per abbinare la parte dell'URL che desideri. 

In questo caso, dal momento che il pattern è semplice, stiamo cercando una barra (\/ e dobbiamo scappare perché la barra in avanti denota l'inizio e la fine del pattern di espressioni regolari), insieme a una o più cifre (\d+ ) alla fine della stringa ($). Le parentesi attorno a \d+ vengono utilizzate per catturare il pezzo che vogliamo: ovvero la fine. Assegniamo quindi il finale che vogliamo ($end) a $matches[1] (non $matches[0], poiché è lo stesso di $url (cioè l'intera stringa)).

$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.
}

Nota: È possibile o meno voler aggiungere un po 'di raffinatezza a questa espressione regolare. Ad esempio, se sai che le tue stringhe URL always iniziano con http://, la regex può diventare /^http:\/\/.*\/(\d+)$/ (dove .* significa zero o più caratteri (che non sono il carattere di nuova riga)).

24
user554546

Dividila e ottieni l'ultimo elemento:

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

Modifica: Per supportare gli URL canonici in stile Apache, rtrim è utile:

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

Un altro esempio che potrei considerare più leggibile è ( Demo ):

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

Questo esempio tiene anche conto di lavorare solo sul percorso dell'URL.


Ancora un altro modifica (anni dopo), canonicalizzazione e facile utilizzo alternativo UTF-8 incluso (tramite espressione regolare PCRE in 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"

Il che è piuttosto approssimativo, ma mostra come racchiuderlo in una chiamata preg_match per un controllo più preciso tramite il pattern di espressione regolare PCRE. Per aggiungere un senso a questo esempio di metallo nudo, dovrebbe essere racchiuso all'interno di una sua funzione (che renderebbe anche l'aliasing superfluo). Presentato in questo modo per brevità.

87
hakre

Il modo più semplice per ottenere questo risultato è con basename()

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

Che stamperà

9393903

Naturalmente, se c'è una stringa di query alla fine verrà inclusa nel valore restituito, nel qual caso la risposta accettata è una soluzione migliore.

81
nikc.org

Se stai cercando una versione robusta in grado di gestire qualsiasi forma di URL , questo dovrebbe essere fatto bene:

<?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));

Ecco la descrizione della funzione strrchr: http://www.php.net/manual/en/function.strrchr.php

Spero sia utile!

12
Tamer Shlash

Un'altra opzione:

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

Una delle soluzioni più eleganti era qui Ottieni caratteri dopo l'ultimo/in url

da DisgruntledGoat

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

strrpos ottiene la posizione dell'ultima occorrenza della barra; substr restituisce tutto dopo quella posizione.

3
Robert Sinclair

Un solo rivestimento: $page_path = end(explode('/', trim($_SERVER['REQUEST_URI'], '/')));

Ottieni URI, taglia le barre, converti in array, afferra l'ultima parte

2
Justin

questo farà facilmente il lavoro per ottenere l'ultima parte dell'URL richiesto

$url="http://domain.com/artist/song/music-videos/song-title/9393903";
$requred_string= substr(strrchr($url, "/"), 1);

questo ti porterà la stringa dopo il primo "/" da destra.

1
XxANxX

Una risposta di lavoro in linea:

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

Produzione: bevanda

0
George Chalhoub

1-liner

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

// if( ! $end ) no match.

Questo rimuove semplicemente tutto prima dell'ultima barra, includendola.

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