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 ?
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 ?
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);
Vérifier nom de base() . Cela devrait fonctionner comme suit :
$string = basename($url);
Cela fonctionne-t-il avec les urls ? Basename n'est-il pas prévu pour les chemins d'accès aux fichiers ?
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.
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.
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];
}
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.
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
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.
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.
0 votes
Vous pouvez trouver
s($str)->afterLast('/')
utile, comme on le trouve dans cette bibliothèque autonome .