59 votes

Comment supprimer http, https et slash de la saisie de l'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 qu'une fonction php produise un résultat du type

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

Faites-moi savoir :)

153voto

ereg_replace est maintenant déprécié, il est donc préférable d'utiliser :

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

Cela supprime soit http:// o https://

40voto

Jacob Relkin Points 90729

Vous devez utiliser un tableau de termes "non autorisés" et utiliser les termes suivants strpos y 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;
}

31voto

Madbreaks Points 8759

Je vous suggère d'utiliser les outils que PHP vous a donnés, jetez un coup d'oeil à 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 produira un résultat :

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

On dirait que vous cherchez au moins host + path (ajoutez-en d'autres selon les besoins, par ex. query ) :

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

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

    > www.domain.com/topic/questions/

Cheers

10voto

Jordan Casey Points 49

Créez un tableau :

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

et remplacer par une chaîne vide :

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

cela ressemblerait à quelque chose comme ça :

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

Str_replace retournera une chaîne si votre botte de foin (entrée) est une chaîne et que vous remplacez votre ou vos aiguilles dans le tableau par une chaîne. Cela permet d'éviter toutes les boucles supplémentaires.

6voto

mike-source Points 456

Wow. Je suis venu ici depuis google en m'attendant à trouver une réplique à copier et coller !

Vous n'avez pas besoin d'une fonction pour faire cela, car il en existe déjà une. Il suffit de le faire :

echo explode("//", "https://anyurl.any.tld/any/directory/structure", 2)[1];

Dans cet exemple, explode() retournera un tableau de :

["https:", "anyurl.any.tld/any/directory/structure"]

Et nous voulons le 2ème élément. Ceci permettra de gérer http, https, ftp, ou à peu près n'importe quel URI, sans avoir besoin de regex.

https://www.php.net/manual/en/function.explode.php

Si vous voulez une fonction :

function removeProtocols($uri) { return explode("//", $uri, 2)[1]; }

EDIT : Voir le commentaire d'utilisateur de Harry Lewis... c'est ma façon préférée de le faire maintenant.

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