web-dev-qa-db-fra.com

PHP Regex pour supprimer http: // de la chaîne

J'ai des URL complètes sous forme de chaînes, mais je souhaite supprimer http: // au début de la chaîne pour afficher correctement l'URL (par exemple: www.google.com au lieu de http://www.google.com )

Quelqu'un peut aider?

40
Casey
$str = 'http://www.google.com';
$str = preg_replace('#^https?://#', '', $str);
echo $str; // www.google.com

Cela fonctionnera pour http:// et https://

125
Sarfraz

Vous n'avez pas du tout besoin d'expression régulière. Utilisez str_replace à la place.

str_replace('http://', '', $subject);
str_replace('https://', '', $subject);

Combinés en une seule opération, comme suit:

str_replace(array('http://','https://'), '', $urlString);
20
Shiplu Mokaddim

Mieux utiliser ceci:

$url = parse_url($url);  
$url = $url['Host'];

echo $url;

Plus simple et fonctionne pour http://https://ftp:// et presque tous les préfixes.

18
Ifti Mahmud

Pourquoi ne pas utiliser parse_url à la place?

4
Amber

Pour supprimer http: // domain (ou https) et obtenir le chemin:

   $str = preg_replace('#^https?\:\/\/([\w*\.]*)#', '', $str);
   echo $str;
2
manufosela

Si vous insistez pour utiliser RegEx:

preg_match( "/^(https?:\/\/)?(.+)$/", $input, $matches );
$url = $matches[0][2];
1
Overv

Oui, je pense que str_replace () et substr () sont plus rapides et plus propres que les regex. Voici une fonction rapide sécuritaire pour cela. Il est facile de voir exactement ce que ça fait. Remarque: renvoyez substr ($ url, 7) et substr ($ url, 8), si vous souhaitez également supprimer le //.

// slash-slash protocol remove https:// or http:// and leave // - if it's not a string starting with https:// or http:// return whatever was passed in
function universal_http_https_protocol($url) {  
  // Breakout - give back bad passed in value
  if (empty($url) || !is_string($url)) {
    return $url;
  }  

  // starts with http://
  if (strlen($url) >= 7 && "http://" === substr($url, 0, 7)) {
    // slash-slash protocol - remove https: leaving //
    return substr($url, 5);
  }
  // starts with https://
  elseif (strlen($url) >= 8 && "https://" === substr($url, 0, 8)) {
    // slash-slash protocol - remove https: leaving //
    return substr($url, 6);
  }

  // no match, return unchanged string
  return $url;
}
0
Brian Lewis