web-dev-qa-db-fra.com

PHP supprimer des caractères après la dernière occurrence d'un caractère dans une chaîne

La chaîne de scénario de test peut donc être:

http://example.com/?u=ben

Ou

http://example.com

J'essaie de tout supprimer après la dernière occurrence d'un "/", mais uniquement si cela ne fait pas partie de "http: //". Est-ce possible!?

J'ai ceci jusqu'à présent:

$url = substr($url, 0, strpos( $url, '/'));

Mais ça ne marche pas, on enlève tout après le premier '/'.

20
benhowdle89

Vous devez utiliser l'outil conçu pour ce type de travail, parse_url

url.php

<?php

$urls = array('http://example.com/foo?u=ben',
                'http://example.com/foo/bar/?u=ben',
                'http://example.com/foo/bar/baz?u=ben',
                'https://foo.example.com/foo/bar/baz?u=ben',
            );


function clean_url($url) {
    $parts = parse_url($url);
    return $parts['scheme'] . '://' . $parts['Host'] . $parts['path'];
}

foreach ($urls as $url) {
    echo clean_url($url) . "\n";
}

Exemple:

·> php url.php                                                                                                 
http://example.com/foo
http://example.com/foo/bar/
http://example.com/foo/bar/baz
https://foo.example.com/foo/bar/baz
13
sberry

Vous devez utiliser la fonction strrpos pas strpos ;-)

substr($url, 0, strrpos( $url, '/'));
75
user2422121

En fait, une solution plus simple à ce que vous voulez réaliser est de jouer avec quelques fonctions de manipulation de chaînes de caractères de PHP. 

Tout d’abord, vous devez trouver la position de la dernière occurrence du '/'. Vous pouvez le faire en utilisant la fonction strrpos () (attention, c’est avec 2 r);

Ensuite, si vous fournissez cette position en tant que valeur négative, en tant que second paramètre de la fonction substr (), la recherche de la sous-chaîne démarrera à partir de la fin.

Le deuxième problème est que vous voulez comme résultat la partie des chaînes qui est à gauche du dernier '/'. Pour ce faire, vous devrez fournir à substr () une valeur négative pour le troisième paramètre, qui indiquera le nombre de caractères à supprimer. 

Pour être sûr du nombre de paramètres à supprimer, vous devez commencer par extraire la partie chaîne située à DROITE du '/', puis compter sa longueur.

//so given this url:
$current_url = 'http://example.com/firstslug/84'

//count how long is the part to be removed
$slug_tbr = substr($current_url, strrpos($current_url, '/')); // '/84'

$slug_length = strlen(slug_tbr); // (3)

/*get the final result by giving a negative value 
to both second and third parameters of substr() */
$back_url = substr($current_url, -strrpos($current_url, '/'), -$slug_length);

//result will be http://example.com/firstslug/
1
Lanci
$cutoff = explode("char", $string); 
echo $cutoff[0]; // 2 for what you want and 3 for the index

également 

echo str_replace ("http: //", "", $ str);

0
Seb