web-dev-qa-db-fra.com

Obtenir le dernier mot de l'URL après une barre oblique PHP

Je dois obtenir le dernier mot d'une URL. Ainsi, par exemple, j'ai l'URL suivante:

http://www.mydomainname.com/m/groups/view/test

Il me faut obtenir avec PHP uniquement "test", rien d'autre. J'ai essayé d'utiliser quelque chose comme ça:

$words = explode(' ', $_SERVER['REQUEST_URI']);
$showword = trim($words[count($words) - 1], '/');
echo $showword;

Ca ne marche pas pour moi Pouvez-vous m'aider s'il vous plaît?

Merci beaucoup!!

14
DiegoP.

en utilisant regex:

preg_match("/[^\/]+$/", "http://www.mydomainname.com/m/groups/view/test", $matches);
$last_Word = $matches[0]; // test
19
fardjad

Utilisez basename avec parse_url:

echo basename(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
36
sanjary

J'ai utilisé ceci:

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

Merci à: https://stackoverflow.com/a/1361752/4189000

3
Wouter den Ouden

Vous pouvez utiliser explode mais vous devez utiliser / comme délimiteur:

$segments = explode('/', $_SERVER['REQUEST_URI']);

Notez que $_SERVER['REQUEST_URI'] peut contenir la chaîne de requête si l'URI actuel en a une. Dans ce cas, vous devez utiliser parse_url before pour obtenir uniquement le chemin:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

Et pour prendre en compte les barres obliques de fin, vous pouvez utiliser rtrim pour les supprimer avant de les scinder en segments en utilisant explode. Alors:

$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = explode('/', rtrim($_SERVER['REQUEST_URI_PATH'], '/'));
2
Gumbo

Pour ce faire, vous pouvez utiliser explode sur votre REQUEST_URI. J'ai créé une fonction simple:

function getLast()
{
    $requestUri = $_SERVER['REQUEST_URI'];

   # Remove query string
    $requestUri = trim(strstr($requestUri, '?', true), '/');
   # Note that delimeter is '/'
    $arr = explode('/', $requestUri);
    $count = count($arr);

    return $arr[$count - 1];
}

echo getLast();
1
Robik

Si la présence d'une chaîne de requête lorsqu'elle est présente ne vous gêne pas, utilisez simplement basename. Vous n'avez pas non plus besoin d'utiliser parse_url.

$url = 'http://www.mydomainname.com/m/groups/view/test';
$showword = basename($url);
echo htmlspecialchars($showword);

Lorsque la variable $url est générée à partir d'une entrée utilisateur ou à partir de $_SERVER['REQUEST_URI']; avant d'utiliser echo, utilisez htmlspecialchars ou htmlentities, sinon les utilisateurs pourraient ajouter des balises html ou exécuter JavaScript sur la page Web.

0
Dan Bray

utiliser preg *

if ( preg_match( "~/(.*?)$~msi", $_SERVER[ "REQUEST_URI" ], $vv ))
 echo $vv[1];
else
 echo "Nothing here";

c'était juste une idée de code. Il peut être réécrit en fonction.

PS Généralement, j'utilise mod_rewrite pour gérer cela ... et traite en php les variables $ _GET. Et ceci est une bonne pratique, à mon humble avis

0
publikz.com