155 votes

Obtenir les caractères après le dernier / dans l'url

Je veux récupérer les caractères après le dernier / dans une url comme http://www.vimeo.com/1234567

Comment faire avec php ?

0 votes

Vous pouvez trouver s($str)->afterLast('/') utile, comme on le trouve dans cette bibliothèque autonome .

319voto

DisgruntledGoat Points 21368

C'est très simple :

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

strrpos obtient la position de la dernière occurrence de la barre oblique ; substrats renvoie tout ce qui se trouve après cette position.


Comme l'a mentionné redanimalwar, s'il n'y a pas de barre oblique, cela ne fonctionne pas correctement puisque strrpos renvoie un message faux. Voici une version plus robuste :

$pos = strrpos($url, '/');
$id = $pos === false ? $url : substr($url, $pos + 1);

66voto

GZipp Points 3193

Vérifier nom de base() . Cela devrait fonctionner comme suit :

$string = basename($url);

2 votes

Cela fonctionne-t-il avec les urls ? Basename n'est-il pas prévu pour les chemins d'accès aux fichiers ?

3 votes

Cela semble fonctionner correctement. Il s'agit d'une fonction de chaîne ; elle ne vérifie pas si le chemin d'accès existe.

0 votes

Attention si vous utilisez cette fonction sur des chaînes autres que des URL, par exemple des noms de classe (__ CLASS __). basename() fonctionnera sous Windows car le DIRECTORY_SEPARATOR est une barre oblique inverse, mais sous Linux, basename() ne cherche qu'une barre oblique, donc basename('App \Class ') renverra "Class" sous Windows mais "App \Class "sur Linux.

13voto

Jonathan Sampson Points 121800

Vous pouvez exploser sur la base de "/", et renvoie la dernière entrée :

print end( explode( "/", "http://www.vimeo.com/1234567" ) );

Pour cela, il faut faire exploser la corde, ce qui n'est pas nécessaire si l'on sait que le motif de la corde elle-même ne changera pas de sitôt. Vous pouvez également utiliser une expression régulière pour localiser cette valeur à la fin de la chaîne :

$url = "http://www.vimeo.com/1234567";

if ( preg_match( "/\d+$/", $url, $matches ) ) {
    print $matches[0];
}

0 votes

explode Il me semble toujours que les frais généraux sont plus importants, bien que je n'aie jamais chronométré la rapidité de l'opération.

0 votes

Il semble que explode() soit un peu plus lent. Sur 10k instances, voici le temps pris par les deux. substr() first : 0.013657/0.045038

0 votes

C'est peut-être plus lent, mais je préfère l'explosion ici. En particulier, si l'url ne contient pas de "/", le +1 dans la réponse de strrpos crée un désordre que explode est capable de surmonter.

12voto

Gabriel Points 140

Vous pouvez utiliser substr y strrchr :

$url = 'http://www.vimeo.com/1234567';
$str = substr(strrchr($url, '/'), 1);
echo $str;      // Output: 1234567

0 votes

Plus comme ça : ltrim(strrchr($url,"/"),"/") ; strchr renvoie une chaîne, pas un nombre

10voto

ghostdog74 Points 86060
$str = "http://www.vimeo.com/1234567";
$s = explode("/",$str);
print end($s);

3 votes

Ma version, bien que le résultat final soit le même que celui affiché, permet à l'OP d'utiliser les autres éléments de la chaîne dédoublée s'il le souhaite.

0 votes

C'est la bonne réponse, puisque le titre demande après "last" / dans l'url

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X