web-dev-qa-db-fra.com

Comment supprimer http, https et slash de l'entrée utilisateur en php

Exemple d'entrée utilisateur

http://domain.com/
http://domain.com/topic/
http://domain.com/topic/cars/
http://www.domain.com/topic/questions/

Je veux une fonction php pour rendre la sortie comme

domain.com
domain.com/topic/
domain.com/topic/cars/
www.domain.com/topic/questions/

Faites le moi savoir :)

36
Blur

Vous devez utiliser un tableau de termes "interdits" et utiliser strpos et str_replace pour les supprimer dynamiquement de l'URL transmise:

function remove_http($url) {
   $disallowed = array('http://', 'https://');
   foreach($disallowed as $d) {
      if(strpos($url, $d) === 0) {
         return str_replace($d, '', $url);
      }
   }
   return $url;
}
30
Jacob Relkin

ereg_replace est désormais obsolète, il est donc préférable d'utiliser:

$url = preg_replace("(^https?://)", "", $url );

Cela supprime soit http:// ou https://

104
user1985367

Je suggère d'utiliser les outils PHP vous a donné, jetez un œil à parse_url .

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
?>

L'exemple ci-dessus affichera:

Array
(
    [scheme] => http
    [Host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
/path

Il semble que vous recherchiez au moins Host + path (ajoutez d'autres au besoin, par exemple query):

$parsed = parse_url('http://www.domain.com/topic/questions/');

echo $parsed['Host'], $parsed['path'];

    > www.domain.com/topic/questions/

À votre santé

22
Madbreaks

Vous pouvez supprimer https et http sur une seule ligne en utilisant ereg_replace:

$url = ereg_replace("(https?)://", "", $url);
5
minaz

Créez un tableau:

$ remove = array ("http: //", "https: //");

et remplacez par une chaîne vide:

str_replace ($ remove, "", $ url);

cela ressemblerait à quelque chose comme ceci:

function removeProtocol($url){
    $remove = array("http://","https://");
    return str_replace($remove,"",$url);
}

Str_replace retournera une chaîne si votre meule de foin (entrée) est une chaîne et que vous remplacez vos aiguilles dans le tableau par une chaîne. C'est sympa, donc vous pouvez éviter toutes les boucles supplémentaires.

Codage heureux!

2
Jordan Casey

Vous pouvez utiliser la fonctionnalité parse url de PHP. Cela fonctionnera pour tous les protocoles, même ftp: // ou https: //

Eiter obtenir le composant de protocole et le soustraire de l'URL, ou simplement concaténer les autres parties ensemble ...

http://php.net/manual/de/function.parse-url.php

1
Paul Weber
<?php
// user input
$url = 'http://www.example.com/category/website/wordpress/wordpress-security/';
$url0 = 'http://www.example.com/';
$url1 = 'http://www.example.com/category/';
$url2 = 'http://www.example.com/category/website/';
$url3 = 'http://www.example.com/category/website/wordpress/';

// print_r(parse_url($url));
// echo parse_url($url, PHP_URL_PATH);

$removeprotocols = array('http://', 'https://');

echo '<br>' . str_replace($removeprotocols,"",$url0);
echo '<br>' . str_replace($removeprotocols,"",$url1);
echo '<br>' . str_replace($removeprotocols,"",$url2);
echo '<br>' . str_replace($removeprotocols,"",$url3);

?>
0
OpenWebWar